Android数据库使用ORMLITE sqlite

时间:2015-10-10 06:50:09

标签: android sqlite ormlite

我使用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

这是我的要求

1 个答案:

答案 0 :(得分:1)

这就是数据库序列应该如何工作的方式。您的示例很简单,但想象一下包含10000000个条目的表。想象一下,他们与ids的第一个10000000自然数。现在想象一个人去除345346th,然后是123344th,最后是234545th。如何在不需要大量计算的情况下知道哪些ID是空的。

如果您的案例是特定的,并且您只需要连续几个条目,那么您将不得不放弃自动增量并自行编码。但是,请考虑所有角落案例,因为我相信他们是相当多的。