java - 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
解决方案
的第 4 个参数query()
是WHERE
查询的子句(不带关键字WHERE
),并且为它传递"row"
.
此外,第二个参数是您传递的表的名称"r_id"
,但错误消息不包含...FROM r_id...
(尽管它应该包含),所以我猜您发布的代码不是您的实际代码。
所以你的查询(用 SQL 翻译)是:
SELECT DISTINCT r_id FROM my_table WHERE row LIMIT 1
这是无效的。但是,如果您只需要 column 的最小值,则
不需要子句。
您可以使用以下查询来执行此操作:WHERE
r_id
SELECT MIN(r_id) AS r_id FROM my_table
没有DISTINCT
and 一个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;
}
推荐阅读
- linux - 从文本文件中仅删除顺序重复?
- java - java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.type。使用 Apache Beam Spark Runner 运行 Go 示例时
- python - 网页抓取问题
- python-3.x - 如何在类似查询中实现“关系”缓存系统?
- vb.net - 如何绑定来自单独列表框的数据?
- java - 将上下文传递给可调用
- r - 从预测包中消除自动绘图中历史和预测之间的差距
- postgresql - 自动将数据从 PostgreSQL 数据库加载到 Google Sheet
- python - 从 PIP 构建 Conda 包。构建 Conda 包时缺少依赖项问题
- reactjs - 如何在反应中限制经常重新渲染的组件