我遇到了一个永恒的问题,想要在删除记录后保留一个自动递增列(在SQLITE中)。我已经遇到过很多关于这个问题的帖子,但是他们都没有解释为什么要为此目的编写自己的列。我需要数字是连续的,因为我希望能够为ListView中的每个项目显示一个记录号,它也将作为db中记录的总数的运行总计。
到目前为止,我一直在尝试使用VACUUM函数,因为我的理解是它会在数字完成后重置数字,而且我认为每次删除记录时都会运行它,但是当代码运行。我没有收到任何错误,但据我所知,VACUUM并没有发生。这是代码:
String sql = "VACUUM;" ;
db.execSQL(sql,new String [] {sql});
也许没有任何事情发生,因为编码已关闭?所以我想我在这里得到的是我在正确的轨道上尝试使用VACUUM还是应该手动设置自动递增列?无论哪种方式,任何建议都非常感谢!
这是代码的获取和显示部分:
populateListViewFromDB();
}
@SuppressWarnings("deprecation")
private void populateListViewFromDB() {
Cursor cursor = db.getAllRecords();
//Allow activity to manage cursor lifetime
startManagingCursor(cursor);
//Setup mapping from cursor to view fields:
String [] fromFieldNames = new String []
{DBAdapter.KEY_ROWID, DBAdapter.KEY_GENRE, DBAdapter.KEY_TITLE, DBAdapter.KEY_PLATFORM, DBAdapter.KEY_DATE, DBAdapter.KEY_PRICE, DBAdapter.KEY_WHEREBOUGHT};
int [] toViewIDs = new int []
{R.id.RecordNumberEdit, R.id.textView1, R.id.textView2, R.id.textView3, R.id.textView4, R.id.textView5, R.id.textView6};
//Create mapping from cursor to view fields
SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(
this,
R.layout.database_view_layout,
cursor, //Set of DB records
fromFieldNames, //DB field Names
toViewIDs //View IDs in which to put info
);
//Set the adapter for the list view
ListView listViewFromDB = (ListView) findViewById(R.id. listViewFromDB);
listViewFromDB.setAdapter(myCursorAdapter);
我将VACCUUM代码更改为以下内容,因为原始代码实际上是两次传递查询:
String sql = "VACUUM;" ;
db.execSQL(sql);
但是,似乎没有任何事情发生。