当前位置:文档之家› Android 中数据库查询方法 query

Android 中数据库查询方法 query

view plaincopy to clipboardprint?
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
}ቤተ መጻሕፍቲ ባይዱ
public void doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"id=" + id + " AND name=?", // selection
new String[] {name}, //selectionArgs
Android中数据库查询方法query()中的select
Android中涉及数据库查询的地方一般都会有一个query()方法,而这些query中有大都(全部?)会有一个参数selectionArgs,比如下面这个android.database.sqlite.SQLiteDatabase.query():
手工处理转义的话,也不麻烦,就是String.replace()调用而已。但是Android SDK为我们准备了selectionArgs来专门处理这种问题:
view plaincopy to clipboardprint?
public void doQuery(long id, final String name) {
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
selection参数很好理解,就是SQL语句中WHERE后面的部分,即过滤条件,比如可以为id=3 AND name='Kevin Yuan'表示只返回满足id为3且name为"Kevin Yuan"的记录。
null, // columns
"? = " + id + " AND name=?", // selection XXXX错误!?不能用来替换字段名
new String[]{"id", name}, //selectionArgs
//......更多参数省略
);
// ......更多代码
}
null, // columns
"id=" + id + " AND name='" + name + "'", // selection
//......更多参数省略
);
}
在这种情况下就要考虑一个字符转义的问题,比如如果在上面代码中传进来的name参数的内容里面有单引号('),就会引发一个"SQLiteException syntax error ...."。
不过需要注意的是?并不是“万金油”,只能用在原本应该是字符串出现的地方。比如下面的用法是错误的:
view plaincopy to clipboardprint?
public void doQuery(long id, final String name) {
mDb.query("some_table", // table name
//......更多参数省略
);
// ......更多代码
}
也就是说我们在selection中需要嵌入字符串的地方用?代替,然后在selectionArgs中依次提供各个用于替换的值就可以了。在query()执行时会对selectionArgs中的字符串正确转义并替换到对应的?处以构成完整的selection字符串。有点像String.format()。
mDb.query("some_table", // table name
null, // columns
"id=" + id + " AND name=?", // selection
new String[] {name}, //selectionArgs
//......更多参数省略
);
// ......更多代码
null, // columns
"id=" + id + " AND name='" + name + "'", // selection
//......更多参数省略
);
}
public doQuery(long id, final String name) {
mDb.query("some_table", // table name
再实际项目中像上面那样简单的“静态”的selection并不多见,更多的情况下要在运行时动态生成这个字符串,比如
view plaincopy to clipboardprint?
public doQuery(long id, final String name) {
mDb.query("some_table", // table name
相关主题