gpt4 book ai didi

android - 如何从行号获取游标

转载 作者:行者123 更新时间:2023-11-29 00:42:42 24 4
gpt4 key购买 nike

我在 android 开发中使用 SQLite。当我使用 insert 插入一行时,我得到了行号。但是,我想要作为表主键的 KEY_ID。我使用了下面的函数,但我得到了:

Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
at android.database.CursorWindow.getLong_native(Native Method)
at android.database.CursorWindow.getInt(CursorWindow.java:434)
at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:93)
at winterfarmer.timemama.DataBaseAdapter.insertData(DataBaseAdapter.java:89)
at winterfarmer.timemama.ManagerActivity.addNewRecord2DB(ManagerActivity.java:106)
at winterfarmer.timemama.ManagerActivity.addNewRecord(ManagerActivity.java:100)
at winterfarmer.timemama.ManagerActivity.addNewRecord2DB(ManagerActivity.java:106)
at winterfarmer.timemama.ManagerActivity.addNewRecord(ManagerActivity.java:100)
at winterfarmer.timemama.ManagerActivity.setRecordOK(ManagerActivity.java:92)
at winterfarmer.timemama.ManagerActivity.setRecord(ManagerActivity.java:78)
at winterfarmer.timemama.ManagerActivity.onActivityResult(ManagerActivity.java:64)
at android.app.Activity.dispatchActivityResult(Activity.java:3890)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)

我该如何修复这个错误?

public int insertData(RecordInfo recordInfo) {
Log.d(TAG, "insertData");

ContentValues initialValues = new ContentValues();

initialValues.put(KEY_HOUR, recordInfo.hour);
initialValues.put(KEY_MINUTE, recordInfo.minute);
initialValues.put(KEY_REPEAT, recordInfo.repeat);

long rowId = db.insert(DB_ALARM_TABLE, null, initialValues);
assert rowId >= 0 : "insertData failed";
Log.d(TAG, "insertData, rowId = " + rowId);
Cursor cur = db.rawQuery("SELECT last_insert_rowid() from "
+ DB_ALARM_TABLE, null);
cur.moveToFirst();
int colId = cur.getColumnIndex(KEY_ID);
Log.d(TAG, "insertData, colId = " + colId);
assert colId >= 0 : "insertData failed";
return cur.getInt(colId);
}

最佳答案

来自游标文档:

public abstract int getColumnIndex (String columnName)

Since: API Level 1 Returns the zero-based index for the given column name, or -1 if the column doesn't exist. If you expect the column to exist use getColumnIndexOrThrow(String) instead, which will make the error more clear

这样可以更好地解释问题。

无论如何,回到您的实际问题:

问题是 KEY_ID 不是您选择查询的结果列(结果不会命名为 KEY_ID,即使该值最初来自 KEY_ID 列)。它只有一列结果,因此要求列索引没有意义。 colId 将为 0。您可以直接执行:

Cursor cur = db.rawQuery("SELECT last_insert_rowid() from "
+ DB_ALARM_TABLE, null);
cur.moveToFirst();
return cur.getInt(0);

关于android - 如何从行号获取游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com