android sqlite 多表查询语句,Android SQLite像查询与多个,可选的条件作为准备好的语句...
我很新的Android,我试图查询数据库表“房屋”的列大小,所有者和城市。Android SQLite像查询与多个,可选的条件作为准备好的语句我想实现的方法getHousesFromDatabase(String owner, String city, Integer size)其中城市和大小可以为空。该方法应该返回大小,位置,城市字段与参数匹配的所有行,但前提是该参数不为空。 即getHouse
我很新的Android,我试图查询数据库表“房屋”的列大小,所有者和城市。Android SQLite像查询与多个,可选的条件作为准备好的语句
我想实现的方法
getHousesFromDatabase(String owner, String city, Integer size)
其中城市和大小可以为空。该方法应该返回大小,位置,城市字段与参数匹配的所有行,但前提是该参数不为空。 即
getHousesFromDatabase("John", null, null);应返回所有者为John的所有行,而不管其他列。
getHousesFromDatabase("John", "San Francisco", null);应该返回所有者为约翰和在旧金山的所有行,依此类推。
我当前的实现是这样的
public House getHousesFromDatabase(String owner, String city, Integer size) {
if (city == null && size == null) {
Cursor cursor = database.rawQuery("select * from " + SQLiteHelper.TABLE_HOUSES + " where "
+ COLUMN_OWNER + " like '" + owner + "%" + "'", null);
}
else if (city == null) {
Cursor cursor = database.rawQuery("select * from " + TABLE_HOUSES + " where "
+ COLUMN_OWNER + " like '" + owner + "%" + "'" +" and where " + COLUMN_SIZE + "like '"+ size +"%'", null);
}
else if (size == null) {
...
}
else {
...
}
}
在if语句覆盖每个可能的变化;但是这对我来说感觉非常笨拙,我想知道是否有一种更简单的方法,并且导致准备好的陈述? (从我读的内容来看,rawQuery()本身很容易被SQL注入,而SQLiteStatement.execute()不能用于查询)。
2015-10-03
z_eb
+0
你是什么意思与“弱势”?为什么不简单地动态构造SQL字符串? –
+0
容易受到SQL注入,我想(我会更新问题)。我认为使用类似SQLiteDatabase.query()方法的东西会自动防止SQL注入,而SQLiteDatabase.rawQuery()方法不会。所以你会建议rawQuery()字符串的动态构造? 我想知道是否可以使用query()更动态地执行此操作,或者使用具有针对SQL注入保护的动态rawQuery()。 –
更多推荐
所有评论(0)