Последняя партия из подготовленного отчета не будет записана, пока я не закрою соединение - PullRequest
0 голосов
/ 13 августа 2010

Я делаю небольшой проект, включая подключение к 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();

1 Ответ

1 голос
/ 13 августа 2010

Не много работал с jdbc и sqllite, но это должно работать:

conn.setAutoCommit(false);
for(int bi : bSet){
    pb.setLong(1,aID);
    pb.setInt(2,bi);
    pb.executeUpdate();
    }
conn.commit();
conn.setAutoCommit(true);

Также взгляните на http://www.zentus.com/sqlitejdbc/, который имеет хороший пример, похожий на ваш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...