我正在尝试使用“DELETE FROM SQLITE_SEQUENCE”SQL语句来重置_ID rowId的编号系统,该编号系统是表的主键。这使得表的第一行再次为1。我能够在java桌面应用程序中没有问题地执行此操作,但是在此Android应用程序中它无法正常工作。任何想法?
编辑:我发现并修复了运行时错误。所以我从问题中删除了堆栈跟踪。但是,该部分是固定的,现在它不会重置行的编号。当我显示数据库时,它显示相同的编号。例如,如果我删除第3行,那么在使用“DELETE FROM SQLITE_SEQUENCE”之后仍然缺少缺少的第3行。在运行该SQL语句之后还需要做其他事吗?比如在数据库中实现数据?我没有必要使用java应用程序执行此操作。
来自数据库类
public static final String MYDATABASE_NAME = "my_database";
public static final String MYDATABASE_TABLE = "my_table";
public static final int MYDATABASE_VERSION = 1;
public static final String _ID = "_id";
public static final String TABLE_STRING = "table_string";
public static final String PAGE = "page";
public static final String VERSION = "version";
//create table MY_DATABASE (_ID integer primary key, Content text not null);
private static final String SCRIPT_CREATE_DATABASE =
"CREATE TABLE IF NOT EXISTS " + MYDATABASE_TABLE + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
TABLE_STRING + " TEXT, " + PAGE + " TEXT, " + VERSION + " TEXT);";
SQLiteDatabase sqLiteDatabase;
SQLiteHelper sqLiteHelper;
Context context;
来自Database类的
public void resetRowNumbers(){
sqLiteDatabase.execSQL("DELETE FROM SQLITE_SEQUENCE WHERE NAME =
'" + MYDATABASE_TABLE + "'");
}
来自MainActivity类的
public void resetRowNumbering(){
db = new Database(getApplication());
db.openToWrite();
db.resetRowNumbers();
db.close();
}
答案 0 :(得分:1)
首先,您不应该删除序列,而是将其重置为零:
"UPDATE sqlite_sequence SET seq = 0 WHERE name= '" + MYDATABASE_TABLE + "'"
但总的来说,你可能知道这一点,重置一个序列几乎从来都不是一个好主意。
答案 1 :(得分:1)
这是我找到的代码有效:
sqLiteDatabase.execSQL("DELETE FROM '" + MYDATABASE_TABLE + "'");
sqLiteDatabase.execSQL("DELETE FROM SQLITE_SEQUENCE WHERE NAME =
'" + MYDATABASE_TABLE + "'");
答案是针对上面第一个SQL语句在DELETE和FROM之间具有*的代码部分。对于Android使用*不起作用。它会导致运行时错误。尽管事实上它有时在互联网示例中显示为SQL语句。它不适用于Android的SQLite版本。
正确的陈述是:
"DELETE FROM '" + MYDATABASE_TABLE + "'"
这将删除表中的所有行。之后使用:
"DELETE FROM SQLITE_SEQUENCE WHERE NAME = '" + MYDATABASE_TABLE + "'"
当您输入新行时,它会将主键编号重置为从1开始。