android - 从 SQLite 表中获取价值
问题描述
我有一个名为Server
and的数据库DatabaseHelper
。我正在尝试从 base 中获取价值
private DatabaseHelper db;
db = new DatabaseHelper(getActivity());
int have = db.getAxe(Column_ID);
在 DatabaseHelper 中的什么位置
public int getAxe(long id)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(Server.TABLE_NAME,
new String[]{Server.COLUMN_ID, Server.COLUMN_AXE},
Server.COLUMN_ID + "=?",
new String[]{String.valueOf(id)}, null, null, null, null);
return cursor.getInt(cursor.getColumnIndex(Server.COLUMN_AXE));
}
但我得到运行时错误:
android.database.CursorIndexOutOfBoundsException:
Index -1 requested, with a size of 1
如果需要,我可以提供Server
代码,但我认为问题出在此处
解决方案
db.query
返回一个位于索引 -1 的 NonNull 游标,您必须将其移动到 0,如果它不移动到 0,则表示不返回任何数据。
你必须cursor.moveToNext()
在阅读 FIRST 位置之前打电话,之前打电话cursor.getInt()
if (cursor.moveToNext()) // if true it have data, otherwise a empty cursor was returned
return cursor.getInt(cursor.getColumnIndex(Server.COLUMN_AXE));
else
return -1;
还记得在读取你想要的所有内容后调用 cursor.close(),通常为:
try {
if (cursor.moveToNext()) // if true it have data, otherwise a empty cursor was returned
return cursor.getInt(cursor.getColumnIndex(Server.COLUMN_AXE));
else
return -1;
} finally {
cursor.close();
}
推荐阅读
- .net - 使用 SSH 公钥/私钥连接到 sFTP 服务器。错误 {Invalid private key file.} 使用 SSH.NET
- algorithm - Barnes-Hut 算法插入质量中心偏移
- parsing - Altair Monarch 能否连接到 Azure blob 存储以使用数据?
- r - 将分隔的字符串拆分为多列并将它们分成行
- timer - 我应该在 asp net core 3.1 中使用什么进行定期操作?
- ruby-on-rails - Rails – 保存现有记录 ID 而不是复制记录
- mysql - 有时 RDS CPU 利用率会非常高
- sql - 选择最长日期或最高可用日期
- node.js - 为什么在我使用 avatar antd 时反应让我出错?
- firebase - 似乎无法将 Firestore 数据推送到 Dialogflow