我正在尝试删除位于我的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)
答案 0 :(得分:2)
SQLite没有实际的TRUNCATE
命令。相反,它有一个截断优化器,只要你在没有DELETE
子句的情况下运行WHERE
,它就会被使用。因此,您应该使用DELETE FROM
而不使用WHERE
子句来截断表:
String sql = "DELETE FROM MAIN_TABLE";
stmt.executeUpdate(sql);
截断优化
当从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);
不要放星星