从sqlite获取行id使用其他字段作为条件

Usu*_*umi 2 sqlite android rowid

先生,我如何根据输入名称,数字返回数据库的rowid?此代码每次都返回值0.我的主键是KEY_ROWID.提前感谢您的帮助

//get rowid
public long getRowId(String name, String number) 
{
    // TODO Auto-generated method stub
    String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_NUMBER};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NUMBER+ "=" +number, null, null, null, null);

    long rowid = c.getColumnIndex(KEY_ROWID);
    return rowid;
}
Run Code Online (Sandbox Code Playgroud)

这是我如何访问它

public void onClick(View arg0) {
            nameChanged = sqlName.getText().toString();
            numChanged = sqlNumber.getText().toString();
            GroupDb info = new GroupDb(EditDetails.this);
            info.open();
            long rowid = info.getRowId(name, num);
            info.updateNameNumber(rowid, nameChanged, numChanged);
            Toast.makeText(getApplicationContext(), rowid+" "+nameChanged+" "+numChanged, Toast.LENGTH_LONG).show();
            ArrayList<Contact> searchResults = info.getView();
            MyCustomBaseAdapter mcba = new MyCustomBaseAdapter(EditDetails.this, searchResults);
            mcba.updateResults(searchResults);
            Toast.makeText(getApplicationContext(), "Update Successful!", Toast.LENGTH_LONG).show();
            info.close();
            }
        });
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 6

精细手册:

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
[...]
退货

一个Cursor对象,位于第一个条目之前.

首先,您已经c进入结果集,您可以使用moveToFirst它:

c.moveToFirst();
Run Code Online (Sandbox Code Playgroud)

现在,您需要从光标指向的行中提取rowid.但是getColumnIndex用于将列名映射到行中的位置:

返回给定列名的从零开始的索引,如果该列不存在,则返回-1.

你得到零是getColumnIndex因为你KEY_ROWID是SELECT查询中的第一列.

我想你getLong是否想要longCursor结果集中提取一个:

long rowid = c.getLong(c.getColumnIndex(KEY_ROWID));
Run Code Online (Sandbox Code Playgroud)

如果您知道查询的结构(您这样做),则可以跳过该getColumnIndex调用并使用已知索引:

long rowid = c.getLong(0);
Run Code Online (Sandbox Code Playgroud)

如果你所做的只是查找rowid,你可以只选择KEY_ROWID:

String[] columns = new String[]{KEY_ROWID};
Run Code Online (Sandbox Code Playgroud)

没有必要从数据库中提取出你忽略的东西.