从数据库中删除一行后,如何更新 SQLite 数据库中的 KEY_ROWID 编号?CASE 1:例如,如果我在数据库中有五行,那么此时最大 KEY_ROWID 为 5。我删除表中的所有行。然后我添加新行,当时 KEY_ROWID 不再从 1 开始,而是从 6 开始。如何将 KEY_ROWID 重新设置为从 1 开始。案例 2:如果我删除第三行,现在表格中只有四行,第 4 行更改为 3,第 5 行更改为 4。如何在程序中进行这些更改?我是否需要针对这些更改对其进行编程,或者 SQLite 中是否有任何设置可以在删除一行后更新 KEY_ROWID?谢谢
问问题
2171 次
2 回答
0
DELETE FROM test;
DELETE FROM sqlite_sequence WHERE name='test';
至于在表中仍有数据时重新编号主键,我真诚地建议不要这样做,因为任何引用您的表的外键都会被破坏。
于 2013-08-18T13:54:18.893 回答
-1
解决方案是用新的数组或列表重写表;
reWriteTable 将允许对行进行自动排序。
private void reWriteTable(){
if(db.listOfDate().size()!=0){
String[] name =new String[db.listOfDate().size()] ;
String[] note=new String[db.listOfDate().size()] ;
String[] date =new String[db.listOfDate().size()];
String[] time =new String[db.listOfDate().size()];
String[] total =new String[db.listOfDate().size()];
for(int i=0;i<db.listOfDate().size();i++) {
String currentString =db.listOfDate().get(i) ; // 0,1,2,3
separated = currentString.split("-"); //Take words between "-" from Database
name[i]=separated[1];
note[i]=separated[2];
date[i]=separated[3];
time[i]=separated[4];
total[i]=separated[1]+"-"+separated[2]+"-"+separated[3]+"-"+separated[4];
}
db.deleteTable();
//db=new Database(MainActivity.this);
for(int i=0;i<total.length;i++) {
Log.d("TAG",String.valueOf(total.length)+" "+total[i]);
String currentString =total[i] ; // 0,1,2,3
separated = currentString.split("-"); //Take words between "-" from Database
name[i]=separated[0];
note[i]=separated[1];
date[i]=separated[2];
time[i]=separated[3];
// total[i]=separated[1]+"-"+separated[2]+"-"+separated[3]+"-"+separated[4];
db.addData(name[i],note[i],date[i],time[i]);
}
}
}
在 Database.java 中定义删除表;
protected void deleteTable(){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL(" drop table if exists " + TABLO_UYGULAMALAR + ";");
onCreate(db);
}
于 2019-09-10T00:45:28.740 回答