Android SQLite按非主键列选择

时间:2014-11-04 05:11:21

标签: android mysql sqlite

我使用SQLiteAssetHelper创建了我的sqlite数据库,我可以很好地执行CRUD操作。但是,我无法获得以下Select语句来返回任何行:

String query = "Select * from Student where serial=?";

Cursor c = rawQuery(query, String[]{serial.trim()});

序列值最初为null,并在应用程序中更新。我的更新查询在这里:

ContentValues cv = new ContentValues();
cv.put("serial", serial.trim());
cv.put("isactivated", 1);

//This returns "1" meaning 1 row was affected
mDb.update("Student", cv, "uid=?", new String[]{String.valueOf(student.getUid())});

我的数据库中的序列字段不是主键。这是为什么它不起作用?主键的select语句可以正常工作:

String query = "Select * from Student where id=?";

Cursor c = rawQuery(query, String[]{String.valueOf(id)});

3 个答案:

答案 0 :(得分:1)

好吧所以我明白了。希望这对某人有帮助。我用

包装我的数据库事务
db.beginTransactionNonExclusive();

//Database operations

db.endTransaction();

我正在阅读beginTransactionNonExclusive()的文档,所有所做的更改都将在事务结束时回滚,除非您调用

db.setTransactionSuccessful()

之前打电话

db.endTransaction();

感谢大家的帮助。

答案 1 :(得分:0)

尝试以这种方式使用

db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)

Cursor c = db.query("Student",null,"serial"+"=?",new String[]{serial.trim()},null, null, null);

如果需要,请像表名一样进行必要的更改。

答案 2 :(得分:0)

看起来像TEXT中的串行列。

使用like子句代替=

例如

db.query("Student",null,"serial like '%?%' ",new String[]{serial.trim()},null, null, null);
如果完全匹配则不需要

db.query("Student",null,"serial like '?' ",new String[]{serial.trim()},null, null, null);