2010-08-20 70 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声明。请阅读我链接到的手册以获取详细信息。