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



先生,如何根据输入的名称和数字返回数据库的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;
}

这是我访问的方法

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();
}
});

来自精细手册:

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
[…]
返回

位于第一个条目之前的Cursor对象。

因此,首先将步骤c放入结果集中,然后可以使用moveToFirst

c.moveToFirst();

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

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

您从getColumnIndex得到一个零,因为您的KEY_ROWID是SELECT查询中的第一列。

如果您想从Cursor的结果集中提取long,我认为您正在寻找getLong

long rowid = c.getLong(c.getColumnIndex(KEY_ROWID));

如果你知道查询的结构(你知道),你可以跳过getColumnIndex调用,只使用已知的索引:

long rowid = c.getLong(0);

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

String[] columns = new String[]{KEY_ROWID};

没有必要从数据库中提取您忽略的内容。

相关内容

  • 没有找到相关文章