2014-03-03 78 views
0

我正在Windows 7上運行Sqlite並使用Eclipse中的Java程序嘗試從輸入文件加載數據到sqlite數據庫表中。 sqlite exe文件,java sqlite JDBC jar文件和數據庫文件都在同一個目錄中。SQLite java錯誤「無法打開數據庫文件」

我讀過大部分聽起來像他們接近回答這個問題但目前尚未解決的線程。

我已經更改了文件夾權限,因此任何人/每個人都有更新/更改文件夾(db文件所在的位置)的訪問權限,但仍然沒有快樂。我已經建立了一個數據庫連接(請參見下面的顯示),但我現在陷入了困境,我已經沒有想法 - 任何人都可以幫忙嗎? 代碼在第30行失敗

公共類數據庫{

public void loadPersonData() { 
    Connection connection = null; 
    PreparedStatement preparedStatement = null; 

    try { 
    connection = ConnectionConfig.getConnection(); 
    preparedStatement = connection 
     .prepareStatement("INSERT INTO PERSON(PERSON_ID,LAST_NAME,FIRST_NAME,STREET,CITY) " 
      + "VALUES(?,?,?,?,?)"); 

     for (PersonData x : ReadPersonData.personList) { 
      preparedStatement.setInt(1, x.getPersonID()); 
      preparedStatement.setString(2, x.getLastName()); 
      preparedStatement.setString(3, x.getFirstName()); 
      preparedStatement.setString(4, x.getStreet()); 
      preparedStatement.setString(5, x.getCity()); 
      preparedStatement.addBatch(); 
     } 

THIS IS LINE 30 - >>>>>了PreparedStatement.executeBatch();

} catch (Exception e) { 
     e.printStackTrace(); 

目前該錯誤消息如下: -

數據庫連接建立

值java.sql.SQLException:無法打開數據庫文件

at org.sqlite.core.DB.throwex(DB.java:859) 
at org.sqlite.core.DB.executeBatch(DB.java:760) 
at org.sqlite.core.CorePreparedStatement.executeBatch(CorePreparedStatement.java:77) 
at Database.loadPersonData(Database.java:30) 
at MainApp.main(MainApp.java:16) 

值java.sql.SQLException :[SQLITE_ERROR] SQL錯誤或缺少數據庫(連接已關閉)

at org.sqlite.core.DB.newSQLException(DB.java:890) 
at org.sqlite.core.CoreStatement.internalClose(CoreStatement.java:109) 
at org.sqlite.jdbc3.JDBC3Statement.close(JDBC3Statement.java:35) 
at Database.loadPersonData(Database.java:44) 
at MainApp.main(MainApp.java:16) 
+0

ConnectionConfig類中的成員? – Sanjeev

+0

hi Sanjeev,public class ConnectionConfig { \t public static Connection getConnection(){ \t \t Connection connection = null; \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t嘗試{ \t \t \t的Class.forName( 「org.sqlite.JDBC」);連接= DriverManager.getConnection(「jdbc:sqlite:C:\\ Program Files(x86)\\ SQLite \\ SS200.db」); \t \t \t System.out。println(「建立數據庫連接」); \t \t} \t \t趕上(例外五){e.printStackTrace();} \t \t返回連接; \t} } –

+0

嗨Sanjeev,我不能完全得到這個評論工作,(新手)上面的代碼(抱歉關於格式!)是在connectionConfig類創建連接到SQLite數據庫,乾杯,馬丁 –

回答

0

我認爲有鎖文件鎖定您的數據庫。 您必須刪除它們 轉到您的數據庫目錄並使用「YourDbName-journal」搜索文件將其刪除 如果它不起作用,應該有效確保您有一個連接在 時間運行,並確保關閉每次連接你的連接。

catch子句後添加此

finally{ 
    try{ 
    preparedStatement.close(); 
    connection.close();} 
    catch(Exception e){e.printStackTrace();}} 

確保每個方法調用連接,因爲SQLite不支持多個連接後添加此代碼。

相關問題