首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ANDROID :如何检索某一行的主键

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

Stack Overflow用户
提问于 2013-08-09 20:33:17
回答 2查看 5.3K关注 0票数 3

很简单的问题,但我仍然没有在互联网上找到我的答案:基本上我刚刚创建了一个新的行并将它插入到数据库中,但是我想保存新创建的那一行的主键。我怎样才能访问它?目前,我正试图使用列的其余值来查找某一行,但我正在将SQLiteException : bind或列索引超出范围。

下面是我当前函数试图获取密钥的代码:

代码语言:javascript
运行
复制
        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;

    }

参数中传递的字符串是我试图用来访问主键的其他列。

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-09 20:42:00

here的答案将给出获得最后一个插入ID所需的内容。

不幸的是,根据rowid.html

如果一个单独的线程在运行sqlite3_last_insert_rowid()函数时在同一数据库连接上执行一个新插入,并因此更改了最后一个INSERT rowid,那么sqlite3_last_insert_rowid()返回的值是不可预测的,可能不等于旧的或新的最后插入rowid。

因此,获取最后一行ID很容易出现并发问题。

您可能想考虑自己生成主键,而不是自动生成它。

或者,如果有其他字段/字段可以搜索唯一标识行的字段,则可以根据该字段进行选择--但是,在这种情况下,其他字段实际上应该是实际的主键。

票数 0
EN

Stack Overflow用户

发布于 2013-08-09 20:39:21

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

你实际上是怎么做的:

代码语言:javascript
运行
复制
if (cursor.moveToFirst()) {
   int _id = cursor.getInt(cursor.getColumnIndex(KEY_ID));
}

您需要检查光标是否为空。在您的实际代码中,您要调用它,但不要检查返回的值。

获取rowId的另一种方法是,如果要通过内置方法insert()插入行,则返回新插入行的rowId。

代码语言:javascript
运行
复制
long rowId = db.insert("table", "nullColumnHack", data);

此外,您还传递了选择null,这意味着:

传递null将返回给定表的所有行。

然后将5个值传递给selectionArgs,这些值与选择中的列数不匹配(在那里传递null )。他们必须匹配。所以你需要修复它:

  • 将列(与selectionArgs中相同的计数)添加到选择中
  • 也将null传递给selectionArgs
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18155176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档