代码之家  ›  专栏  ›  技术社区  ›  Ibanez1408

无法在Android中的sqlite数据库中获取最大值

  •  0
  • Ibanez1408  · 技术社区  · 5 年前

    我试图在Android中获取SQLite中表的最大id。我是这样在数据库帮助程序中获得它的:

    public int getMaxIncrementation() {
            SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
            String result = "0";
            try{
                Cursor cursor = sqLiteDatabase.rawQuery("SELECT MAX(id) FROM " +TABLE_INCREMENTATION, new String[]{});
                    cursor.moveToFirst();
                    result = cursor.getString(cursor.getColumnIndex(INCREMENTATION_ID));
            }catch (Exception ex) {
                Log.e("ex", ex.getMessage());
            }
            return Integer.parseInt(result);
        };
    

    我就是这样创建表的:

    private static final String CREATE_TABLE_INCREMENTATION = "CREATE TABLE IF NOT EXISTS " + TABLE_INCREMENTATION
                + "("
                + INCREMENTATION_DATEADDED + " TEXT,"
                + INCREMENTATION_DIRECTION + " INTEGER,"
                + INCREMENTATION_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + INCREMENTATION_USER + " TEXT"
                + ")";
    

    这是包含数据的表的快照:

    enter image description here

    在从中访问数据之前正确初始化。

    0 回复  |  直到 4 年前
        1
  •  3
  •   forpas    5 年前

    ? 占位符则不需要向sql语句传递任何参数,因此 rawQuery() null
    此外,还必须为查询返回的列指定一个别名,并使用它来获取返回的值(不能使用 INCREMENTATION_ID 因为它不是返回的列的名称):

    Cursor cursor = sqLiteDatabase.rawQuery("SELECT MAX(id) AS maxid FROM " +TABLE_INCREMENTATION, null);
    if (cursor.moveToFirst())
        result = cursor.getString(cursor.getColumnIndex("maxid"));
    

    0

    Cursor cursor = sqLiteDatabase.rawQuery("SELECT MAX(id) FROM " +TABLE_INCREMENTATION, null);
    if (cursor.moveToFirst())
        result = cursor.getString(0);