Android SQLite 从数据库列中获取第一个元素

Android SQLite take the first element from database column

我正在做一个项目并使用 SQLite 创建了一个数据库。在我的数据库中,我只有两列,列名是 r_id 和 m_id。我想获取 r_id 的第一个元素并将其分配给一个字符串。 r_id 列的元素类似于 1、2、3.. 在这种情况下,我的字符串必须为 1.

我的代码;创建数据库查询: 没有问题我可以正确添加数据。

my_table = "CREATE TABLE "my_table"("r_id" Text, "m_id" Text);";
db.execSQL(my_table );

取列第一个元素的代码;

public String getSetting() {
            String result = "";
            String[] columns = {"r_id"};
            String[] selectionArgs = {"1"};
            String LIMIT = String.valueOf(1); // <-- number of results we want/expect

            SQLiteDatabase db = databaseHelper.getReadableDatabase();
            Cursor c = db.query(true, "r_id", columns, "row", selectionArgs, null, null, null, LIMIT);

            if (c.moveToFirst()) {
                result = result + c.getString(0);
            } else {
                result = result + "result not found";
            }

            c.close();
            databaseHelper.close();
            return result;
        }

我遇到的错误:

android.database.sqlite.SQLiteException: no such column: row (code 1 SQLITE_ERROR): , while compiling: SELECT DISTINCT r_id FROM my_table WHERE row LIMIT 1

query() 的第 4 个参数是查询的 WHERE 子句(没有关键字 WHERE),为此你传递 "row"
此外,第二个参数是 table 的名称,您为其传递 "r_id",但错误消息不包含 ...FROM r_id...(尽管它应该),所以我猜您的代码发布的不是您的实际代码。

所以您的查询(翻译成SQL)是:

SELECT DISTINCT r_id FROM my_table WHERE row LIMIT 1

这是无效的。
但是如果您只需要 r_id 列的最小值,则不需要 WHERE 子句。
您可以使用如下查询来完成:

SELECT MIN(r_id) AS r_id FROM my_table

没有 DISTINCTWHERE 子句。

或者:

SELECT r_id FROM my_table ORDER BY r_id LIMIT 1;

所以你的 java 代码应该是:

public String getSetting() {
    SQLiteDatabase db = databaseHelper.getReadableDatabase();
    Cursor c = db.rawQuery("SELECT MIN(r_id) AS r_id FROM my_table", null);
    String result = c.moveToFirst() ? c.getString(0) : "result not found";
    c.close();
    databaseHelper.close();
    return result;
}

我这里用的是rawQuery()而不是query()

或者:

public String getSetting() {
    SQLiteDatabase db = databaseHelper.getReadableDatabase();
    Cursor c = db.query(false, "my_table", new String[] {"r_id"}, null, null, null, null, "r_id", "1");
    String result = c.moveToFirst() ? c.getString(0) : "result not found";
    c.close();
    databaseHelper.close();
    return result;
}