【问题标题】:Android database using ORMLITE sqlite使用 ORMLITE sqlite 的 Android 数据库
【发布时间】:2015-10-10 06:50:09
【问题描述】:

我使用 ormlite 使用了 sqlite 数据库。我在数据库中声明了主键,如下所示:在数据库中,我获取值并显示在列表视图中。当我删除一些条目时。在列表视图中。主键继续增加值。

@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)主键:2(如果我删除此值) 3)主键:3

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

这是我的要求

【问题讨论】:

  • 我不明白...你希望它表现得那样,或者你在抱怨这种行为。你在哪里以及如何创建你的表? (提示:需要OrmLiteSqliteOpenHelper 的代码)
  • 请找到 db 的代码...一般是主键( (generatedId = true,columnName = "teacher_id")........它继续增加顺序..创建时新条目..当我们删除一些条目然后插入意味着它以该递增顺序开始(例如,如果我删除 2 个条目并且插入意味着条目以 3 开头......不是具有相同的 id(即 2))。 .这是我的问题...我想以相同的值(即 2)开始新条目

标签: android sqlite ormlite


【解决方案1】:

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

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

【讨论】:

  • 如果我删除第 345346 个条目意味着 345346 的 id 不存在于数据库中,对吗?第 345345 个......空间(不在数据库中)......第 345347 个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多