很简单的问题,但我仍然没有在互联网上找到我的答案:基本上我刚刚创建了一个新的行并将它插入到数据库中,但是我想保存新创建的那一行的主键。我怎样才能访问它?目前,我正试图使用列的其余值来查找某一行,但我正在将SQLiteException : bind或列索引超出范围。
下面是我当前函数试图获取密钥的代码:
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;
}参数中传递的字符串是我试图用来访问主键的其他列。
非常感谢!
发布于 2013-08-09 20:42:00
here的答案将给出获得最后一个插入ID所需的内容。
不幸的是,根据rowid.html
如果一个单独的线程在运行sqlite3_last_insert_rowid()函数时在同一数据库连接上执行一个新插入,并因此更改了最后一个INSERT rowid,那么sqlite3_last_insert_rowid()返回的值是不可预测的,可能不等于旧的或新的最后插入rowid。
因此,获取最后一行ID很容易出现并发问题。
您可能想考虑自己生成主键,而不是自动生成它。
或者,如果有其他字段/字段可以搜索唯一标识行的字段,则可以根据该字段进行选择--但是,在这种情况下,其他字段实际上应该是实际的主键。
发布于 2013-08-09 20:39:21
ANDROID :如何检索某一行的主键
你实际上是怎么做的:
if (cursor.moveToFirst()) {
int _id = cursor.getInt(cursor.getColumnIndex(KEY_ID));
}您需要检查光标是否为空。在您的实际代码中,您要调用它,但不要检查返回的值。
获取rowId的另一种方法是,如果要通过内置方法insert()插入行,则返回新插入行的rowId。
long rowId = db.insert("table", "nullColumnHack", data);此外,您还传递了选择null,这意味着:
传递null将返回给定表的所有行。
然后将5个值传递给selectionArgs,这些值与选择中的列数不匹配(在那里传递null )。他们必须匹配。所以你需要修复它:
https://stackoverflow.com/questions/18155176
复制相似问题