让 SQLite 删除表中的所有记录

jav*_*uan 3 java database sqlite

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

代码:

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);
}
}
Run Code Online (Sandbox Code Playgroud)

错误:

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)
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 5

SQLite 没有实际的TRUNCATE命令。相反,它有一个 truncate 优化器,每当您在DELETE没有WHERE子句的情况下运行时都会使用它。所以你应该只使用DELETE FROM不带WHERE子句来截断你的表:

String sql = "DELETE FROM MAIN_TABLE";
stmt.executeUpdate(sql);
Run Code Online (Sandbox Code Playgroud)

文档

截断优化

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