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是空的,而不需要大量的计算。
如果您的情况很特殊,并且只有很少的条目,您需要按顺序排列,那么您将不得不放弃自动增量并自己编写代码。但是请考虑所有极端情况,因为我相信它们很多。
我使用了 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是空的,而不需要大量的计算。
如果您的情况很特殊,并且只有很少的条目,您需要按顺序排列,那么您将不得不放弃自动增量并自己编写代码。但是请考虑所有极端情况,因为我相信它们很多。