2012-10-09 58 views
2

我正在使用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); 
    } 
} 
+0

這裏的問題是Java SQLite JDBC Driver(版本3.7.2)和安裝在我的機器上的SQLite版本(版本2.8.17)之間的版本不匹配。使用sqlite3二進制文件解決了這個問題。我搜索了一段時間的解決方案,所以我想我在這裏發佈它,以便更容易找到使用Java的人的解決方案(正如我在一些與Java無關的帖子中發現的)。 – Exocom

+0

然後回答你自己的問題,而不是發表評論:) – m0skit0

+0

感謝您的提示。不幸的是,雖然我必須等待8個小時,但我還沒有足夠的聲望點。 – Exocom

回答

3

的這裏的問題是Java的SQLite的JDBC驅動程序(版本3.7.2)和SQLite的版本安裝在我的機器上(17年2月8日版本)之間的版本不匹配。使用sqlite3二進制文件解決了這個問題。

0

有沒有這樣的事情:「SQLite JDBC驅動3.7.2從Java內部」?我瞭解JavaDB(Derby),但不知道Java內部實際上有一個SQLite JDBC驅動程序。

相關問題