【发布时间】:2013-12-03 11:07:46
【问题描述】:
您好,我正在尝试更新一些行,增加 int 字段中的值,但它不起作用。 这是我的sn-p代码:
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables("TICKET");
String[] proj = new String[]{ "TICKET","NUMERO_ARTICOLO","QUANTITA","COMMESSA_IN","CODICE_SQUADRA"};
try{
Cursor cursor = queryBuilder.query(sqlDB, proj, selection, null, null, null, null);
sqlDB.beginTransaction();
cursor.moveToFirst();
while (cursor.moveToNext()){
String query = "UPDATE MATERIALE "
+ " SET RIMANENTE = RIMANENTE - " + cursor.getString(cursor.getColumnIndex("QUANTITA"))
+ " WHERE NUMERO_ARTICOLO = '"+cursor.getString(cursor.getColumnIndex("NUMERO_ARTICOLO"))+"'"
+" AND COMMESSA = '"+cursor.getString(cursor.getColumnIndex("COMMESSA_IN"))+"' "
+" AND CODICE_SQUADRA = '"+cursor.getString(cursor.getColumnIndex("CODICE_SQUADRA"))+"' ";
Log.d("update","Query: "+query);
sqlDB.rawQuery(query, null);
}
rowsUpdated = sqlDB.update("TICKET", values, selection, null);
sqlDB.setTransactionSuccessful();
Log.d("update","Aggiornate "+rowsUpdated+" righe");
sqlDB.endTransaction();
}catch (Exception e) {
e.printStackTrace();
}
break;
default:
throw new IllegalArgumentException("Unknown URI: " + uri);
}
getContext().getContentResolver().notifyChange(CONTENT_URI, null);
return rowsUpdated;
最后一个查询正在运行
rowsUpdated = sqlDB.update("TICKET", values, selection, null);
但是 while 循环不起作用。
我做错了什么?也许更新SET RIMANENTE = RIMANENTE - " + cursor.getString(cursor.getColumnIndex("QUANTITA"))
我想要循环(while)和最后一次更新在同一个事务中。
【问题讨论】:
-
单步执行代码时,光标是空的还是有行?
-
你总是跳过第一行。 cursor.moveToFirst() 转到第一行,然后 while (cursor.moveToNext()) 将您移动到第二行以进行循环的第一次迭代。这是这里的问题吗?
-
cursor.moveToFirst() 是我没有输入真实代码的错字。游标不为空 我可以循环浏览游标但行没有更新。
标签: android sql sqlite transactions android-sqlite