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)
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 使用优化来擦除整个表内容,而不必单独访问表的每一行。这种“截断”优化使删除运行得更快。
| 归档时间: |
|
| 查看次数: |
4577 次 |
| 最近记录: |