0

我在android SQLite中有一个表,我试图弄清楚如何重置KEY_ID,我读到:DELETE FROM tablename应该删除所有内容并将自动增量字段重置为0但是当我这样做时它只会删除数据。当插入新记录时,自动增量会从删除前停止的位置开始。我已经实现了一个longitemclicklistner列表,它获得了位置,我想从列表中删除特定的项目。这是我的代码

public void deleteContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();
        getWritableDatabase().delete(TABLE_CONTACTS, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) } );


        db.close();
    }

这是代码onlongclicklistner

 public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                     int pos, long id) {
                // TODO Auto-generated method stub

                Log.v("long clicked","pos"+" "+pos);

                final int p=pos+1;

                final AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this);
                b.setIcon(android.R.drawable.ic_dialog_alert);
                b.setMessage("Are you sure you want to DELETE this Entry?");
                b.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                           // continue with delete

                            db.getWritableDatabase();
                            db.deleteContact(db.getContact(p));
                            Intent i = new Intent(MainActivity.this,MainActivity.class);
                            startActivity(i);
                        }
                });
                b.setNegativeButton("No", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            // do nothing
                        }
                });

                b.show();

         }

问题是,id1先创建然后再id2创建,但是当我删除id2并创建新联系人时,它会得到id3. 我想让它得到id2

4

2 回答 2

5

这是 的一个特点AUTOINCREMENT。要使键重用,请将列定义从

INTEGER PRIMARY KEY AUTOINCREMENT

只是

INTEGER PRIMARY KEY

进一步阅读:http ://sqlite.org/autoinc.html

于 2013-09-19T11:37:23.667 回答
4

你为什么需要那个?它会使插入非常慢。假设你有数据 1,2,3,4....700,你删除了 2,你会怎么做?把所有的数字都上移?(重新插入)?

或者您将下一个插入索引设置为 2?就在那时...现在删除 18、45、70。并插入一个新行。插入到 18 后...它必须搜索 45?假设您现在也跟踪所有空白空间,即使那样,您将如何满足以随机顺序删除 205、102、300、50

您可以使用堆来存储可用索引,但这也没有任何意义。也许如果您有一些特定的用例并与我们分享,我们将能够为您提供更好的帮助。

于 2013-09-20T03:15:58.027 回答