首页 > 解决方案 > Android SQLite 从数据库列中获取第一个元素

问题描述

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

标签: javaandroidsqliteandroid-sqlite

解决方案


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

所以你的查询(用 SQL 翻译)是:

SELECT DISTINCT r_id FROM my_table WHERE row LIMIT 1

这是无效的。但是,如果您只需要 column 的最小值,则
不需要子句。 您可以使用以下查询来执行此操作:WHEREr_id

SELECT MIN(r_id) AS r_id FROM my_table

没有DISTINCTand 一个WHERE子句。

或者:

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;
}

推荐阅读