You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android与SQLite新手求助:添加第二个变量后的rawQuery语句是否正确?

你的rawQuery问题分析与修正方案

嘿,作为Android和SQLite新手,你碰到的这个问题其实挺典型的~咱们先拆解下你代码里的问题:

你直接把color和equipment变量拼接到SQL语句里,这会导致两个关键问题:

  1. 字符串类型参数缺少单引号:如果color或equipment是字符串(比如"red"、"GPS"),拼接后的SQL会变成SELECT car FROM cars WHERE color = red AND equipment = GPS;——SQL会把red和GPS当成列名而非字符串值,自然就报错了,这就是你添加第二个变量后出问题的核心原因。
  2. 存在SQL注入风险:如果有人恶意构造变量值(比如把color设为' OR 1=1 --),拼接后的SQL会绕过条件返回所有数据,甚至破坏数据库。

正确的写法:使用参数化查询

SQLite的rawQuery支持用?作为占位符,然后在第二个参数里传入变量数组,SQLite会自动处理字符串的引号和转义,既安全又不会报错:

Cursor cursor = database.rawQuery(
    "SELECT car FROM cars WHERE color = ? AND equipment = ?;",
    new String[]{color, equipment}
);

补充说明

你在数据库管理器里能正常运行,是因为你手动给字符串加了单引号(比如WHERE color = 'red'),但代码里直接拼接没加,所以才会出现差异。以后写SQL查询时,尽量用参数化的方式,别直接拼接变量,既能避免这类语法错误,也能提升安全性~

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:13:53