我使用ormlite使用了sqlite数据库。我在数据库中声明了主键,如下所示:在数据库中,我获取值并显示在listview中。当我删除一些entry.in list view..primary key继续增加值。
@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();
}
//用于创建db的代码。
@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)主键:2(如果我删除此值)3)主键:3
删除后1)主键:1 2)主键:3(不以主键值2开头)3)主键4
这是我的要求
答案 0 :(得分:1)
这就是数据库序列应该如何工作的方式。您的示例很简单,但想象一下包含10000000个条目的表。想象一下,他们与ids的第一个10000000自然数。现在想象一个人去除345346th,然后是123344th,最后是234545th。如何在不需要大量计算的情况下知道哪些ID是空的。
如果您的案例是特定的,并且您只需要连续几个条目,那么您将不得不放弃自动增量并自行编码。但是,请考虑所有角落案例,因为我相信他们是相当多的。