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
没有 DISTINCT
和 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;
}
我正在做一个项目并使用 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
没有 DISTINCT
和 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;
}