# android.database.sqlite.SQLiteException: 语法错误 near "?": (code 1): , 编译时: SELECT * FROM users WHERE id = ? AND name = ?

- **ID:** `android/room-query-parameter-mismatch`
- **领域:** android
- **类别:** runtime_error
- **错误码:** `1`
- **验证级别:** ai_generated
- **修复率:** 95%

## 根因

Room @Query 中的参数数量与方法参数数量不匹配，导致 SQL 语法错误。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| Room 2.4.0 | active | — | — |
| Room 2.5.0 | active | — | — |
| Room 2.6.0 | active | — | — |

## 解决方案

1. ```
   确保 SQL 查询中的 '?' 占位符数量与方法参数数量匹配。例如：如果方法是 'fun getUser(id: Int, name: String): User?'，查询应为 'SELECT * FROM users WHERE id = ? AND name = ?'。
   ```
2. ```
   使用命名绑定参数语法 ':paramName' 以提高清晰度并避免计数不匹配。例如：'SELECT * FROM users WHERE id = :id AND name = :name'。
   ```
3. ```
   运行 Room 的注解处理器（kapt 或 ksp）以在编译时生成验证错误，捕获参数不匹配问题。
   ```

## 无效尝试

- **** — The SQL query still has fewer placeholders than arguments, causing a mismatch error. (80% 失败率)
- **** — This introduces SQL injection risk and does not fix the parameter count issue. (90% 失败率)
