当前位置:首页>行业动态> 正文

安卓开发 数据库条件查询语句

数据库条件查询语句核心语法

在安卓开发中,数据库条件查询主要通过WHERE 子句实现,以下是常见的条件表达式:

安卓开发 数据库条件查询语句  第1张

条件类型SQL 语法示例说明
等于column = ?精确匹配值(推荐使用占位符防止SQL注入)
不等于column != ?排除指定值
模糊匹配column LIKE '%value%'使用通配符 进行模糊查询(如搜索包含关键词的文本)
范围查询column BETWEEN ? AND ?查询介于两个值之间的数据(如时间范围、数值区间)
多值匹配column IN (?, ?, ?)匹配多个指定值中的一个(如查询指定ID列表)
空值判断column IS NULL筛选空值字段
组合条件condition1 AND condition2使用逻辑运算符组合多个条件(如age > 18 AND city = 'Beijing'

安卓中执行条件查询的两种方式

原生 SQLite 查询(SQLiteDatabase

// 示例:查询年龄大于18且城市为北京的用户
String sql = "SELECT  FROM users WHERE age > ? AND city = ?";
Cursor cursor = db.rawQuery(sql, new String[]{"18", "Beijing"});

Room 持久化库查询

// 定义查询方法(支持条件参数)
@Query("SELECT  FROM user WHERE age > :minAge AND city = :city")
List<User> getUsersByCondition(int minAge, String city);
// 调用时传入参数
List<User> result = userDao.getUsersByCondition(18, "Beijing");

参数化查询防注入对比

方式安全写法风险写法(易被注入)
推荐方式SELECT FROM table WHERE id = ?SELECT FROM table WHERE id = " + userId
区别使用占位符(?)自动转义特殊字符直接拼接字符串可能导致SQL注入

动态条件查询实现方案

当查询条件不固定时,可通过以下方式动态构建:

// 示例:根据可选条件拼接SQL
StringBuilder sqlBuilder = new StringBuilder("SELECT  FROM products WHERE 1=1");
List<String> args = new ArrayList<>();
if (priceRange != null) {
    sqlBuilder.append(" AND price BETWEEN ? AND ?");
    args.add(priceRange[0]);
    args.add(priceRange[1]);
}
if (category != null) {
    sqlBuilder.append(" AND category = ?");
    args.add(category);
}
// 转换列表为数组
Cursor cursor = db.rawQuery(sqlBuilder.toString(), args.toArray(new String[0]));

常见问题与解答

问题1:如何防止SQL注入攻击?

解答
始终使用参数化查询(占位符)或Room的参数绑定功能,避免直接拼接用户输入内容。

// 安全写法(参数化查询)
String sql = "SELECT  FROM users WHERE username = ?";
Cursor cursor = db.rawQuery(sql, new String[]{inputUsername});

问题2:如何实现多条件组合查询?

解答
使用逻辑运算符(AND/OR)连接条件,并通过代码动态构建查询。

// 动态拼接条件
String whereClause = "status = ?";
String[] args = {"active"};
// 如果需要添加其他条件
if (dateNotNull) {
    whereClause += " AND date > ?";
    args = Arrays.copyOf(args, args.length + 1);
    args[args.length 1] = "2023-01-01";
}
// 执行查询
Cursor cursor = db.query("tasks", null, whereClause, args, null, null, null);