2016-07-11 4 views
0

MAIN_TABLEのすべてのレコードをC:ドライブにあるデータベースで削除しようとしています。SQLiteを使用していて、Androidプラットフォームにはありません。私はそれが正しい100%わからないので、私は唯一の例のカップルで使用TURNCATEを見てきました。..SQLiteを使用してテーブル内のすべてのレコードを削除する

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) 

答えて

1

SQLiteは、実際のTRUNCATEコマンドを持っていません。むしろ、それはあなたがWHERE句なしでDELETEを実行するたびに使用されます切り捨てオプティマイザを持っています。 documentationから

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

:だから、あなたは自分のテーブルを切り捨てることWHERE句なしDELETE FROMを使用する必要があります

WHEREは、DELETE文から省略されて切り捨ての最適化

そして削除されるテーブルは、SQLiteのは、個々に、テーブルの各行を訪問することなく、テーブル全体の内容を消去する最適化を使用して、何のトリガを有していません。この「切り詰め」最適化により、削除がはるかに高速に実行されます。

+1

はどうもありがとうございました! – javajoejuan

関連する問題