【问题标题】:what happens to my first insertion in sqlite?我第一次插入 sqlite 会发生什么?
【发布时间】:2023-03-30 16:04:01
【问题描述】:

总结

使用 android studio 和 sqlite 数据库,我正在尝试向表中插入一些行。问题是当我想阅读它们时,它会忽略第一行。

代码

先向DATASETS_INFO表插入3行:

        SQLiteDatabase db = this.getWritableDatabase();

        String query = "INSERT INTO `DATASETS_INFO`(`dataset_ID`, `dataset_name`, `type`, `RAPI`) " +
                "VALUES (122, 'avg temp salon 2', 1, '3avwVmZpw00')";
        db.execSQL(query);

        query = "INSERT INTO `DATASETS_INFO`(`dataset_ID`, `dataset_name`, `type`, `RAPI`) " +
                "VALUES (125, 'avg hum salon 2', 2, '75uNfLLy300')";
        db.execSQL(query);

        query = "INSERT INTO `DATASETS_INFO`(`dataset_ID`, `dataset_name`, `type`, `RAPI`) " +
                "VALUES (126, 'max hum salon 2', 2, 'b8rwdUM4F00')";
        db.execSQL(query);

然后阅读它们:

        SQLiteDatabase db = this.getWritableDatabase();
        String query = "Select dataset_name, type FROM DATASETS_INFO";
        Cursor myCursor = db.rawQuery(query, null);
        Log.d("DatabaseHelper", "myCursor.getCount(): " + myCursor.getCount());
        DatasetInfo[] datasetInfos = new DatasetInfo[myCursor.getCount()];
        if (myCursor.moveToFirst()) {
            int i=0;
            while (myCursor.moveToNext()) {
                Log.d("DatabaseHelper", "i: " + i + ", dataset_name: " + myCursor.getString(0));
                datasetInfos[i] = new DatasetInfo();
                datasetInfos[i].dataset_name = myCursor.getString(0);
                datasetInfos[i].type = myCursor.getInt(1);
                ++i;
            }
        }

输出: 如您所见,它忽略了第一行并从第二行开始:

07-24 10:38:06.317 7253-7253/com.example.black3rror.mpandroidchart D/DatabaseHelper: myCursor.getCount(): 3
07-24 10:38:06.317 7253-7253/com.example.black3rror.mpandroidchart D/DatabaseHelper: i: 0, dataset_name: avg hum salon 2
07-24 10:38:06.317 7253-7253/com.example.black3rror.mpandroidchart D/DatabaseHelper: i: 1, dataset_name: max hum salon 2

有趣的是 getCount() 返回 3 但我不知道第一个在哪里。

【问题讨论】:

    标签: java android sqlite insert sqliteopenhelper


    【解决方案1】:

    第一条记录被跳过的原因是你在调用moveToFirst(),然后没有读取它(这是第一条记录),你在调用moveToNext()。因此,在这些调用之间跳过了第一条记录。

    moveToFirst() 用于在已经到达某个位置后需要从头开始迭代时使用。在您的情况下,您已经处于第一位。以下应该工作:

    int i = 0;
      do  {
       Log.d("DatabaseHelper", "i: " + i + ", dataset_name: " + myCursor.getString(0));
            datasetInfos[i] = new DatasetInfo();
            datasetInfos[i].dataset_name = myCursor.getString(0);
            datasetInfos[i].type = myCursor.getInt(1);
            ++i;
    } while (myCursor.moveToNext());
    

    【讨论】:

      【解决方案2】:

      你应该使用 do while 循环

                do {
                  Log.d("DatabaseHelper", "i: " + i + ", dataset_name: " + myCursor.getString(0));
                  datasetInfos[i] = new DatasetInfo();
                  datasetInfos[i].dataset_name = myCursor.getString(0);
                  datasetInfos[i].type = myCursor.getInt(1);
                  ++i;
              } while (myCursor.moveToNext());
      

      【讨论】:

      • 嗯。你说的对。那个愚蠢的while 结构是因为从网上复制粘贴。谢谢
      猜你喜欢
      • 1970-01-01
      • 2014-01-25
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      相关资源
      最近更新 更多