Le H2 en mémoire de la base de données stocke les données dans la mémoire à l'intérieur de la JVM. Lorsque la JVM des sorties, de perte de ces données.
Je soupçonne que ce que vous faites est similaire pour les deux classes Java ci-dessous. L'une de ces classes crée une table et l'autre essaie d'insérer:
import java.sql.*;
public class CreateTable {
public static void main(String[] args) throws Exception {
DriverManager.registerDriver(new org.h2.Driver());
Connection c = DriverManager.getConnection("jdbc:h2:mem:test");
PreparedStatement stmt = c.prepareStatement("CREATE TABLE PERSON (ID INT PRIMARY KEY, FIRSTNAME VARCHAR(64), LASTNAME VARCHAR(64))");
stmt.execute();
stmt.close();
c.close();
}
}
et
import java.sql.*;
public class InsertIntoTable {
public static void main(String[] args) throws Exception {
DriverManager.registerDriver(new org.h2.Driver());
Connection c = DriverManager.getConnection("jdbc:h2:mem:test");
PreparedStatement stmt = c.prepareStatement("INSERT INTO PERSON (ID, FIRSTNAME, LASTNAME) VALUES (1, 'John', 'Doe')");
stmt.execute();
stmt.close();
c.close();
}
}
Quand j'ai couru ces classes, l'une après l'autre, j'ai obtenu le résultat suivant:
C:\Users\Luke\stuff>java CreateTable
C:\Users\Luke\stuff>java InsertIntoTable
Exception in thread "main" org.h2.jdbc.JdbcSQLException: Table "PERSONNE" n'est pas trouvée; instruction SQL:
INSERT INTO PERSONNE (ID, PRENOM, NOM) VALUES (1, 'Jean', 'Untel") [42102-154]
au org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
au org.h2.message.DbException.get(DbException.java:167)
au org.h2.message.DbException.get(DbException.java:144)
...
Dès que la première java
processus s'arrête, la table créée par CreateTable
n'existe plus. Ainsi, lorsque l'InsertIntoTable classe vient, il n'y a pas de table pour les insérer dans.
Quand j'ai changé les chaînes de connexion pour l' jdbc:h2:test
, j'ai trouvé qu'il n'y a aucune erreur. J'ai aussi trouvé qu'un fichier test.h2.db
était apparu. C'est là que H2 avait mis la table, et depuis qu'il a été stocké sur le disque, la table était toujours là pour le InsertIntoTable classe à trouver.