2011-04-01 77 views
2


我寫了一個java程序,應該用算法生成的某些行填充sqlite數據庫。 所以我訪問數據庫,我插入我的行... 它去幾秒鐘,但:Java和SQLite問題

1.30168691E9s 100 - > '0 1 2 5 8',0,0,0
3.163 s 200 - >'0 1 2 7 17',0,0,0
3.158s 300 - >'0 1 2 9 30',0,0,0
線程「main」java.sql中的異常.SQLException:無法打開數據庫文件
在org.sqlite.DB.execute(DB.java:275)
在org.sqlite.DB.executeUpdate(DB.java:281)
在org.sqlite.Stmt .executeUpdate(S tmt.java:103)
在grid0.GridFill.fillTable(GridFill.java:26)
在grid0.GridFill.writeCombs(GridFill.java:54)
在grid0.Main.main(Main.java:15 )
Java結果:1

程序進入了前300行,但隨後崩潰......我不明白爲什麼。 我需要一些幫助......

謝謝...

公共無效fillTable(字符串手)拋出異常
{
字符串數據= 「」「 +手+」',0 ,0,0「;
if(count%100 == 0)
{
System.out.println((System.currentTimeMillis() - time)/(float)1000 +「s」+ count +「 - >」+ data );
time = System.currentTimeMillis(); (「+數據+」)「);」插入到手中(手,鎖,完成,替換數)「VALUES(」+ data +「)」); http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC Xerial似乎往往比zentus多更新其驅動器:
}

+0

Hmmmm ...一些常見的罪魁禍首:這是螺紋的,如果是這樣,你是積極的,你沒有在同一時間訪問從多個線程數據庫? (請記住,GUI通常在與其他工作線程不同的線程中運行)是否每次都打開數據庫,如果是這樣,是否在嘗試再次打開數據庫之前關閉它?只是我遇到的一些事情。 – riwalk 2011-04-01 20:02:09

+0

這是什麼操作系統?另一個程序是否可以同時觸摸文件?你可能在分區上的磁盤空間不足嗎? – 2011-04-01 20:02:17

+0

它是一個單線程程序,我在Windows七64,我使用zentus jdbc驅動程序,我有65GB的高清... – StefanoS 2011-04-01 20:11:13

回答

2

首先我使用的SQLite JDBC驅動程序從xerial.org它可以在這裏找到了更好的運氣。

使用jdbc時,最好使用PreparedStatements。準備好的陳述將允許你做一些事情,比如執行一批插入。而不是執行多個executeUpdate調用,您可以使用批次一次執行所有調用。有關批處理和PreparedStatements的示例,請參閱以下鏈接:http://download.oracle.com/javase/1.3/docs/guide/jdbc/spec2/jdbc2.1.frame6.html http://download.oracle.com/javase/1.4.2/docs/guide/jdbc/getstart/preparedstatement.html

基本代碼示例需要的是:

PreparedStatement stmt = con.prepareStatement(
    "INSERT INTO employees('salary', 'name') VALUES (?, ?)"); 

stmt.setInt(1, 2000); 
stmt.setString(2, "Kelly Kaufmann"); 
stmt.addBatch(); 

stmt.setInt(1, 3000); 
stmt.setString(2, "Bill Barnes"); 
stmt.addBatch(); 

// submit the batch for execution 
stmt.executeBatch(); 

setInt(index,value)允許你替換'?'在帶有值的PreparedStatement中。使用批處理和預處理語句,您可以多次執行此操作,並在調用executeBatch()時最終一次執行它們。

另外,正如評論者所述,確保在完成插入後關閉與數據庫的連接。此外,您還需要關閉可能通過從數據庫中選擇而打開的任何結果集。

我希望這會有所幫助。

-Alex

+0

簡單地切換到xerial jdbc驅動程序適用於我。謝謝! – duvo 2016-07-06 21:43:47