Java ANDROID SQLITE:如何检索某一行的主键
这个问题很简单,但我还是没有在网上找到答案: 基本上,我刚刚创建完一个新行并将其插入数据库,但我想保存该行新创建的主键。如何访问它? 目前,我正试图使用列的其余值来查找某一行,但我得到了SQLiteException:bind或column索引超出范围 以下是当前函数尝试获取keyid的代码:Java ANDROID SQLITE:如何检索某一行的主键,java,android,sql,database,sqlite,Java,Android,Sql,Database,Sqlite,这个问题很简单,但我还是没有在网上找到答案: 基本上,我刚刚创建完一个新行并将其插入数据库,但我想保存该行新创建的主键。如何访问它? 目前,我正试图使用列的其余值来查找某一行,但我得到了SQLiteException:bind或column索引超出范围 以下是当前函数尝试获取keyid的代码: public String getPrimaryKey(String gameTitle, String gameType, String calories, String hours,
public String getPrimaryKey(String gameTitle, String gameType, String calories, String hours, String minutes) {
Cursor cursor = db.query(TABLE_NAME, null, null,new String[]{gameTitle, gameType,calories, hours, minutes},null, null,null,null);
if(cursor.getCount()<1)
{
cursor.close();
return "????";
}
cursor.moveToFirst();
String keyid = cursor.getString(cursor.getColumnIndex(KEY_ID));
cursor.close();
return keyid;
}
public String getPrimaryKey(String游戏标题、String游戏类型、String卡路里、String小时、String分钟){
Cursor Cursor=db.query(表名,null,null,新字符串[]{gameTitle,gameType,carries,hours,minutes},null,null,null,null);
if(cursor.getCount()
ANDROID SQLITE:如何检索某一行的主键
你是如何做到这一点的:
if (cursor.moveToFirst()) {
int _id = cursor.getInt(cursor.getColumnIndex(KEY_ID));
}
您需要检查光标是否为空。在实际代码中,您正在调用它,但不检查返回值
另一种获取rowId的方法是,如果您通过内置方法插入行,它将返回新插入行的rowId
long rowId = db.insert("table", "nullColumnHack", data);
您还将选择传递为null,这意味着:
传递null将返回给定表的所有行
然后,您将五个值传递给SelectionAgs,这些值与所选内容中的列数不匹配(您在此处传递了null)。它们必须匹配。因此您需要修复它:
- 向选择添加列(与SelectionAgs中的列数相同)
- 也将null传递给SelectionAgs
答案将为您提供获取最后一个插入ID所需的信息
不幸的是,根据:
如果一个单独的线程在运行sqlite3_last_INSERT_rowid()函数时对同一数据库连接执行新的插入,从而更改了最后一次插入的rowid,那么sqlite3_last_INSERT_rowid()返回的值是不可预测的,可能不等于旧的或新的最后一次插入的rowid
因此,获取最后一行ID容易出现并发问题
<>你可能想考虑自己生成主键而不是自动生成它。
或者,如果您可以搜索一些其他字段来唯一地标识行,您可以根据这些字段进行选择——但是,在这种情况下,这些其他字段实际上应该是实际的主键