我正在使用Java中的SQLite JDBC驅動程序3.7.2將數據寫入數據庫文件。當我嘗試它,打開命令行上的數據庫文件,我得到一個錯誤信息說:Java - JDBC驅動程序SQLite 3.7.2 - 無法打開數據庫test.db:文件已加密或不是數據庫
「無法打開數據庫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 Driver(版本3.7.2)和安裝在我的機器上的SQLite版本(版本2.8.17)之間的版本不匹配。使用sqlite3二進制文件解決了這個問題。我搜索了一段時間的解決方案,所以我想我在這裏發佈它,以便更容易找到使用Java的人的解決方案(正如我在一些與Java無關的帖子中發現的)。 – Exocom
然後回答你自己的問題,而不是發表評論:) – m0skit0
感謝您的提示。不幸的是,雖然我必須等待8個小時,但我還沒有足夠的聲望點。 – Exocom