在SQLite中实现手动编码自动递增RowId /使用VACUUM

时间:2014-01-06 05:23:40

标签: android sql sqlite

我遇到了一个永恒的问题,想要在删除记录后保留一个自动递增列(在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);

但是,似乎没有任何事情发生。

0 个答案:

没有答案