Java – JDBC驱动程序SQLite 3.7.2 – 无法打开数据库test.db:文件已加密或不是数据库

我正在使用java中的SQLite JDBC驱动程序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); } } 

这里的问题是Java SQLite JDBC驱动程序(版本3.7.2)与我的机器上安装的SQLite版本(版本2.8.17)之间的版本不匹配。 使用sqlite3二进制解决了这个问题。

有没有这样的事情:“java中的SQLite JDBC驱动程序3.7.2”? 我知道JavaDB(Derby),但不知道Java中实际上有一个SQLite JDBC驱动程序。

试试这段代码:

 Properties config = new Properties(); config.put("journal_mode", "WAL"); Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:"+dbFilename,config);