Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ANDROID SQLITE:如何检索某一行的主键_Java_Android_Sql_Database_Sqlite - Fatal编程技术网

Java ANDROID SQLITE:如何检索某一行的主键

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,

这个问题很简单,但我还是没有在网上找到答案: 基本上,我刚刚创建完一个新行并将其插入数据库,但我想保存该行新创建的主键。如何访问它? 目前,我正试图使用列的其余值来查找某一行,但我得到了SQLiteException:bind或column索引超出范围

以下是当前函数尝试获取keyid的代码:

        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容易出现并发问题

<>你可能想考虑自己生成主键而不是自动生成它。

或者,如果您可以搜索一些其他字段来唯一地标识行,您可以根据这些字段进行选择——但是,在这种情况下,这些其他字段实际上应该是实际的主键