Я делаю небольшой проект, включая подключение к sqlite.Я пишу в две таблицы с отношением один ко многим.
Последний пакет для второй таблицы не будет записан, если я не закрою соединение явно.Я нахожу это странным, поскольку база данных находится в режиме автоматической фиксации (т. Е. Connection.commit () выдает ошибку).
Я хотел бы оставить соединение открытым, так как я сделаю довольно много вызовов для записиmethod.
Есть ли что-нибудь кроме commit (), которое я могу сделать для принудительной записи на диск?
Вот пример кода, близкий к минимальному, обратите внимание, что если я раскомментирую conn.close) это будет работать как я хочу.
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:result");
Statement stat = conn.createStatement();
stat.executeUpdate("create table if not exists " +
"a (a1, aID INTEGER PRIMARY KEY ASC)");
stat.executeUpdate("create table if not exists " +
"b (aID, b1, attributePathID INTEGER PRIMARY KEY ASC)");
PreparedStatement pa = conn.prepareStatement(
"insert into a (a1) values (?);");
PreparedStatement pb = conn.prepareStatement(
"insert into b (aID,b1) values (?,?);");
int[] aSet = new int[] {10,20,30};
int[] bSet = new int[] {1,2};
for(int ai : aSet){
pa.setInt(1,ai);
pa.execute();
ResultSet rs = pa.getGeneratedKeys();
rs.next();
long aID = rs.getLong(1);
for(int bi : bSet){
pb.setLong(1,aID);
pb.setInt(2,bi);
pb.execute();
}
}
//conn.close();