我们可以在android数据库中使用截断查询吗? 否则我们可以使用我们的java代码执行截断操作吗?
答案 0 :(得分:12)
如果我必须截断一个表,我只需删除并重新创建它。
文档(http://www.sqlite.org/lang_delete.html):
当从DELETE语句中省略WHERE并且要删除的表没有触发器时,SQLite使用优化来擦除整个表内容,而无需单独访问表的每一行。这种“截断”优化使删除运行速度更快。
答案 1 :(得分:6)
DELETE FROM tablename
真空
例如:
db.execSQL("DELETE FROM " + TABLE_NAME);
db.execSQL("VACUUM");
注意:这不会使用AUTOINCREMENT重置行的行编号。为此,您需要删除表并重新创建它。
来源:http://phpcode.mypapit.net/how-to-truncate-table-in-sqlite-database/49/
答案 2 :(得分:1)
这是我使用的代码,仅用于说明:
private static final String TABLE_SCHEMA = "CREATE TABLE " + TABLE_NAME + " (\"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , \"runtime\" INTEGER, \"timestamp\" DATETIME DEFAULT CURRENT_TIMESTAMP)";
db.execSQL("DROP TABLE " + TABLE_NAME);
db.execSQL(TABLE_SCHEMA);
答案 3 :(得分:1)
正如WarrenFaith所指出的那样,我只是提供了2019年12月的逻辑代码
在您的活动/片段中
// Delete The Temp Table
public static void clearSQLiteTempImagesTable(Context context) {
// SQLite Variable
SQLiteDatabase mDatabase;
SQLiteHelper dbHelper = new SQLiteHelper(context);
mDatabase = dbHelper.getWritableDatabase();
mDatabase.beginTransaction();
try {
mDatabase.execSQL("DROP TABLE IF EXISTS "+TempImagesContract.tempImagesTable.TABLE_NAME);
TempImagesContract.createTempImagesTable(mDatabase);
mDatabase.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
mDatabase.endTransaction();
mDatabase.close();
}
}
SQLite助手
public class TempImagesContract {
public TempImagesContract() {
}
// Create Table
public static void createTempImagesTable(SQLiteDatabase db) {
final String SQL_CREATE_TEMP_IMAGES_TABLE = "CREATE TABLE " +
tempImagesTable.TABLE_NAME + " (" +
tempImagesTable._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
tempImagesTable.COLUMN_IMAGE_URL + " TEXT NOT NULL " +
");";
db.execSQL(SQL_CREATE_TEMP_IMAGES_TABLE);
}
// Define Table
public static final class tempImagesTable
implements BaseColumns {
public static final String TABLE_NAME = "temp_images";
public static final String COLUMN_IMAGE_URL = "image_url";
}
}