让SQLite删除表

时间:2016-07-11 01:08:38

标签: java database sqlite

我正在尝试删除位于我的C:/驱动器中的数据库MAIN_TABLE中的所有记录。我正在使用SQLite而我不在Android平台。我只看到TURNCATE在几个例子中使用过,所以我不是百分百肯定这是对的..

CODE:

package Exporter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class DeleteAllRecords { 
//public void   runDeleteAllRecords()throws Exception, SQLException {
  public static void main(String[] argv) throws Exception {

String driverName = "org.sqlite.JDBC";
Class.forName(driverName);

String url = ("jdbc:sqlite:" + "C:/Test/DATABASE.db");
Connection connection = DriverManager.getConnection(url);
Statement stmt = connection.createStatement();

String sql = "TRUNCATE MAIN_TABLE";
stmt.executeUpdate(sql);
sql = "DELETE FROM MAIN_TABLE";
stmt.executeUpdate(sql);
}
}

错误:

Exception in thread "main" java.sql.SQLException: near "TRUNCATE": syntax error
at org.sqlite.core.NativeDB.throwex(NativeDB.java:397)
at org.sqlite.core.NativeDB._exec(Native Method)
at org.sqlite.jdbc3.JDBC3Statement.executeUpdate(JDBC3Statement.java:116)
at Exporter.DeleteAllRecords.main(DeleteAllRecords.java:21)

3 个答案:

答案 0 :(得分:2)

SQLite没有实际的TRUNCATE命令。相反,它有一个截断优化器,只要你在没有DELETE子句的情况下运行WHERE,它就会被使用。因此,您应该使用DELETE FROM而不使用WHERE子句来截断表:

String sql = "DELETE FROM MAIN_TABLE";
stmt.executeUpdate(sql);

来自documentation

  

截断优化

     

当从DELETE语句中省略WHERE并且要删除的表没有触发器时,SQLite使用优化来擦除整个表内容,而无需单独访问表的每一行。这种“截断”优化使删除运行速度更快。

答案 1 :(得分:0)

“从主表删除”可能还不够。您的数据仅标记为已删除,但实际上仍在数据库文件中。

如果要用零代替旧数据,则需要第二条命令 “真空”。

近似代码:

String sql = "DELETE FROM MAIN_TABLE";
stmt.executeUpdate(sql);
sql = "VACUUM";
stmt.executeUpdate(sql);

答案 2 :(得分:0)

db.execSQL("delete from "+ TABLENAME);

不要放星星