2

从数据库中删除一行后,如何更新 SQLite 数据库中的 KEY_ROWID 编号?CASE 1:例如,如果我在数据库中有五行,那么此时最大 KEY_ROWID 为 5。我删除表中的所有行。然后我添加新行,当时 KEY_ROWID 不再从 1 开始,而是从 6 开始。如何将 KEY_ROWID 重新设置为从 1 开始。案例 2:如果我删除第三行,现在表格中只有四行,第 4 行更改为 3,第 5 行更改为 4。如何在程序中进行这些更改?我是否需要针对这些更改对其进行编程,或者 SQLite 中是否有任何设置可以在删除一行后更新 KEY_ROWID?谢谢

4

2 回答 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 回答