Android 数据库使用 ORMLITE sqlite

Android database using ORMLITE sqlite

我使用了 sqlite 数据库 ormlite.I 已将数据库中的主键声明为 follows:In 数据库我获取值并显示在列表视图中。当我删除一些 entry.in 列表视图时..主键继续增加值。

@DatabaseField(generatedId = true,columnName = "teacher_id")
        int teacherid;   

     try {
                                Toast.makeText(DetailListView.this, "Delete entry", Toast.LENGTH_LONG).show();
                                DeleteBuilder<TeacherDetails, Integer> deleteBuilder=teacherDao.deleteBuilder();
                                deleteBuilder.where().eq("teacher_address", set.teacheraddress);
                                deleteBuilder.delete();
                                stud_list = teacherDao.queryForAll();
                                //adapter = new UsersAdapter(DetailListView.this, stud_list);
                               // list.setAdapter(adapter);
                                list.invalidate();
                                teacherDao.executeRaw("delete from sqlite_sequence where name='teacher_details';");
                            } catch (SQLException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }

//创建数据库的代码。

@Override
    public void onCreate   (SQLiteDatabase sqliteDatabase,      ConnectionSource      connectionSource) {
    try {


        TableUtils.createTable(connectionSource, TeacherDetails.class);
        TableUtils.createTable(connectionSource, StudentDetails.class);

    } catch (SQLException e) {
        Log.e(DatabaseHelper.class.getName(), "Unable to create datbases", e);
    }
}

   @Override
   public void onUpgrade(SQLiteDatabase sqliteDatabase, ConnectionSource   connectionSource, int oldVer, int newVer) {
    try {



        TableUtils.dropTable(connectionSource, TeacherDetails.class, true);
        TableUtils.dropTable(connectionSource, StudentDetails.class, true);
        onCreate(sqliteDatabase, connectionSource);

    } catch (SQLException e) {
        Log.e(DatabaseHelper.class.getName(), "Unable to upgrade database from version " + oldVer + " to new "
                + newVer, e);
    }
}

例如删除前 1)主键 :1 2)主键 key:2(如果我删除这个值)3)主键 key:3

删除后1)主key:1 2)主key:3(不是以主键值2开头) 3)主键4

这是我的要求

数据库序列应该是这样工作的。您的示例很简单,但想象一个包含 10000000 个条目的 table。想象一下,它们的 id 是前 10000000 个自然数。现在想象一个人去删除第 345346 个,然后是第 123344 个,最后是第 234545 个。它应该如何知道哪些id是空的,而不需要大量的计算。

如果您的情况很特殊,并且只有很少的条目,您需要按顺序排列,那么您将不得不放弃自动增量并自己编写代码。但是请考虑所有极端情况,因为我相信它们很多。