2010-08-20 26 views
1

我正在使用java sqlite(org.sqlite.JDBC)與此我添加一個新的數據行的表,一個字段應該佔用大量的base64編碼數據(如pdf )這個字段的類型是sql-TEXT。現在,如果我刪除了「DELETE FROM table WHERE id ='id'」這一行,那麼該行會按預期刪除,我的sqlite瀏覽器證實了這一點。但表格爲4KB大的刪除,添加行後爲12MB,刪除後仍保持12MB大小。有沒有我需要做的一種清理? 在sqlite管理員(http://sqliteadmin.orbmu2k.de/)有一個「清理」按鈕後,一切都很好,這意味着數據庫縮小到其大小添加的東西(4KB)。後問谷歌我真的無法找到這樣的SQL命令。似乎只有索引信息從我的數據庫文件中被刪除,而不是內容本身。這種行爲從Windows刪除函數中是已知的。sql清理功能。行不會真的被刪除

那旁邊,這裏是Java代碼我使用:

public void deleteRowById(String table, int id){ 
    try { 
     Connection connection = null; 
     Class.forName("org.sqlite.JDBC"); 
     connection = DriverManager.getConnection("jdbc:sqlite:C:\\meinedb"); 

     //statement = connection.createStatement(); 
     String sql = "DELETE FROM "+table+" WHERE id='"+id+"'"; 
     PreparedStatement pstmt = connection.prepareStatement(sql); 
     pstmt.executeUpdate(); 
     pstmt.close(); 
     connection.close(); 
    } catch (SQLException ex) { 
     Logger.getLogger(FileSpinner.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (ClassNotFoundException ex){ 

    } 

} 

回答

1

您可以收縮SQLite數據庫與VACUUM聲明。請閱讀我鏈接到的手冊以獲取詳細信息。