2

Java内からSQLiteJDBCドライバー3.7.2を使用して、データベースファイルにデータを書き込んでいます。コマンドラインでデータベースファイルを開こうとすると、次のようなエラーメッセージが表示されます。

「データベースtest.dbを開くことができません:ファイルが暗号化されているか、データベースではありません」

この動作をもたらす最小限の例を作成しました。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class PlaygroundSQLite {
    public static void insertIntoDB(String dbFilename, String tablename){
        try {
            Class.forName("org.sqlite.JDBC");
            Connection conn = DriverManager.getConnection("jdbc:sqlite:"+dbFilename);
            PreparedStatement prep = conn.prepareStatement("insert into " + tablename + "( id, text) values (?, ?);");

            prep.setString(1, "1FD22A38");
            prep.setString(2, "This is a simple test");

            prep.addBatch();

            conn.setAutoCommit(false);
            prep.executeBatch();
            conn.setAutoCommit(true);

            conn.close();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void createDB(String dbFilename, String tablename){
        try {
            Class.forName("org.sqlite.JDBC");
            Connection conn = DriverManager.getConnection("jdbc:sqlite:" + dbFilename);
            Statement stat = conn.createStatement();
            stat.executeUpdate("drop table if exists test;");
            stat.executeUpdate("create table " + tablename + " (key INTEGER PRIMARY KEY, id TEXT , text TEXT);");
            conn.close();
            stat.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String dbFilename = "test.db";
        String tablename = "test";

        PlaygroundSQLite.createDB(dbFilename, tablename);
        PlaygroundSQLite.insertIntoDB(dbFilename, tablename);
    }
}
4

3 に答える 3

4

ここでの問題は、Java SQLite JDBC ドライバー (バージョン 3.7.2) と私のマシンにインストールされている SQLite バージョン (バージョン 2.8.17) の間のバージョンの不一致でした。sqlite3 バイナリを使用すると問題が解決しました。

于 2012-10-10T07:09:27.253 に答える
0

「Java内からのSQLite JDBCドライバー3.7.2」のようなものはありますか? JavaDB (Derby) については知っていますが、実際に Java 内に SQLite JDBC ドライバーがあることを知りませんでした。

于 2013-08-09T07:07:58.997 に答える