Android中从SQLite数据库取单个值及SQL语法错误排查修复
解答你的Android SQLite问题
一、先解决你遇到的SQLite异常问题
你碰到的android.database.sqlite.SQLiteException: near ".": syntax error错误,核心原因是SQL语句里的字符串值没有用单引号包裹。
你写的SQL是:
select launch from apps where name=com.google.android.apps.maps
这里的com.google.android.apps.maps是字符串类型的查询值,但你没加单引号,SQL解析器会把它当成一个带点的标识符(比如列名或表名),自然就会报语法错误。
修复方法:
- 手动给字符串加单引号,修正后的SQL:
select launch from apps where name='com.google.android.apps.maps'
- 更推荐的做法:使用参数化查询,既能避免语法错误,还能防止SQL注入攻击,代码更健壮。示例如下:
Java 代码示例:
// 使用query方法 String selection = "name = ?"; String[] selectionArgs = {"com.google.android.apps.maps"}; Cursor cursor = db.query("apps", new String[]{"launch"}, selection, selectionArgs, null, null, null); // 或者使用rawQuery方法 String sql = "select launch from apps where name=?"; Cursor cursor = db.rawQuery(sql, new String[]{"com.google.android.apps.maps"});
二、如何在Android中从SQLite获取单个值
获取单个值的核心思路是:执行查询得到Cursor,检查Cursor是否有数据,然后取出对应列的值,最后记得关闭Cursor避免内存泄漏。
Java 实现示例:
public String getLaunchValue(String appName) { SQLiteDatabase db = this.getReadableDatabase(); String launchValue = null; // 指定要查询的列 String[] projection = {"launch"}; // 查询条件 String selection = "name = ?"; String[] selectionArgs = {appName}; // 执行查询,try-with-resources会自动关闭Cursor try (Cursor cursor = db.query( "apps", projection, selection, selectionArgs, null, null, null )) { // 检查Cursor是否有数据 if (cursor.moveToFirst()) { // 根据列名获取索引,再取出对应值(这里假设launch是字符串类型) int columnIndex = cursor.getColumnIndexOrThrow("launch"); launchValue = cursor.getString(columnIndex); } } return launchValue; }
Kotlin 实现示例(更简洁):
Kotlin可以用use函数自动管理Cursor的关闭,无需手动处理:
fun getLaunchValue(appName: String): String? { val db = readableDatabase return db.query( "apps", arrayOf("launch"), "name = ?", arrayOf(appName), null, null, null ).use { cursor -> if (cursor.moveToFirst()) { cursor.getString(cursor.getColumnIndexOrThrow("launch")) } else { null } } }
注意事项:
- 根据实际数据类型选择对应的Cursor方法:比如整数用
getInt(),长整型用getLong(),布尔值用getInt() != 0等。 - 务必关闭Cursor:Java推荐用
try-with-resources,Kotlin用use函数,避免内存泄漏。
内容的提问来源于stack exchange,提问作者Ening
相关产品推荐
相关产品推荐

