假设我Cursor
获得了db.query()
然后我按db.update()
修改行中的字段,此行包含在之前查询的Cursor
中。
此光标中的数据是否会改变?
Cursor cur = db.query("[some parameter can get row 0]");
cur.moveToFirst;
int a = cur.getInt(0);
db.update("[some parameter can modify row 0 col 0]");
int b = cur.getInt(0);
(a == b)是真还是假?
======编辑2012.10.1 =========
我不是专业程序员,而且在这些日子里忙于编码
如果我让你不开心,我很抱歉
最后,我度过了一个星期的假期,哈哈。
我做了这样的编码:
SQLiteOpenHelper h = null;
SQLiteDatabase db = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
h=new SQLiteOpenHelper(this, "test.db", null,1){
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
arg0.execSQL("CREATE TABLE t1 (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT )");
arg0.execSQL("INSERT INTO t1 (name) VALUES ('name_wrong')");
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}};
db=h.getWritableDatabase();
Cursor cur = db.query("t1", null, null, null, null, null, null);
cur.moveToFirst();
String s1=cur.getString(1);
db.execSQL("UPDATE t1 SET name = 'name_right'");
String s2=cur.getString(1);
Log.d("","s1 = "+s1);
Log.d("","s2 = "+s2);
Log.d("","s1 == s2 is "+s1.equals(s2));
Log.d("","requery...");
cur = db.query("t1", null, null, null, null, null, null);
cur.moveToFirst();
s2=cur.getString(1);
Log.d("","s1 = "+s1);
Log.d("","s2 = "+s2);
Log.d("","s1 == s2 is "+s1.equals(s2));
}
然后logcat说:
10-01 03:11:28.356: D/(1514): s1 = name_wrong
10-01 03:11:28.356: D/(1514): s2 = name_wrong
10-01 03:11:28.356: D/(1514): s1 == s2 is true
10-01 03:11:28.356: D/(1514): requery...
10-01 03:11:28.356: D/(1514): s1 = name_wrong
10-01 03:11:28.356: D/(1514): s2 = name_right
10-01 03:11:28.356: D/(1514): s1 == s2 is false
所以我想我得到了答案 谢谢大家。
答案 0 :(得分:2)
基本上
(a == b)是真还是假?
假
答案 1 :(得分:0)
我相信游标会有变化,因为游标只是指向记录/数据集的指针。我不相信它们本身就是一个基于内容的实际数据结构。
答案 2 :(得分:0)
https://www.rondebruin.nl/win/s4/win003.htm
如果在查询开始运行之后但在查询完成之前在同一数据库连接上发生更改,则查询是否会看到这些更改是不确定的。
如果在查询开始运行之后但在查询完成之前在同一数据库连接上发生更改,则查询可能会多次返回已更改的行,或者它可能会返回先前已删除的行。