如何解决Android Java SQLite rowid 基于另一列中的数据
我整天都在做这件事。在问题的另一个方面得到了帮助,但我又被难住了。如何获取列中具有某些数据的行的rowid?我需要以 int 或字符串形式返回的 rowid。示例数据:
_id|firstname|lastname
1 |Bob |Dole
2 |Richard |Simmons
3 |Steven |King
那么,如果我想在 lastname = "Simmons" 的情况下获取 rowid 应该使用什么代码?运行 select 语句后,我认为 c.getPosition() 会这样做,但返回 -1。这是我到目前为止所得到的:
String where = "SELECT rowid,* FROM masterRecord WHERE masNameCol='" + name + "'"; //name is a variable passed from another activity
Cursor c = db.rawQuery(where,null);
String rowid = "_id = " + c.getPosition(); //This always returns -1. In this example,I need it to be 2
ContentValues newValues = new ContentValues();
newValues.put(KEY_MASNAMECOL,rowid);
newValues.put(KEY_MASTIMECOL,newTime);
c.close();
return db.update(masterRecord,newValues,rowid,null) != 0;
请注意,如果我将 return 语句中的 rowid 替换为“_id=2”,它将按预期工作。所以我把范围缩小到只需要以某种方式获得那个数字。
其他解决方案
String where = "SELECT rowid,* FROM " + masterName + " WHERE masNameCol='" + name + "'";
int rowid = 0;
Cursor c = db.rawQuery(where,null);
c.movetoFirst(); //Needed this line
if (c.getCount() > 0) { //And this if statement
rowid = c.getInt(c.getColumnIndex("_id"));
}
ContentValues newValues = new ContentValues();
newValues.put(KEY_MASNAMECOL,newTime);
c.close();
return db.update(masterName,"_id =" + rowid,null) != 0;
解决方法
您可以在不首先获取其 rowid 的情况下更新表:
String where = "masNameCol = ?";
ContentValues newValues = new ContentValues();
newValues.put(KEY_MASNAMECOL,"somevaluehere"); // what value do you want this column to be updated?
newValues.put(KEY_MASTIMECOL,newTime);
return db.update(masterRecord,newValues,where,new String[] {name}) != 0;
请注意,如果列 masNameCol
不是唯一的,这将使用变量 name
的值更新所有行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。