来自用户的 Android Studio SQLite 查询,包括“'”

Posted

技术标签:

【中文标题】来自用户的 Android Studio SQLite 查询,包括“\'”【英文标题】:Android Studio SQLite query from the user including " ' "来自用户的 Android Studio SQLite 查询,包括“'” 【发布时间】:2022-01-17 09:46:45 【问题描述】:

我有一个字典应用程序,用户需要在其中输入 editText 并单击翻译按钮以显示结果。它运行良好,但每当用户输入包含 ' 的查询(例如 Baker's)时,我都会收到如下 SQLite 错误:

android.database.sqlite.SQLiteException: near "s": syntax error (code 1 SQLITE_ERROR[1]): , while compile: select * from words where vocab = 'Baker's'

binding.transcribe.setOnClickListener 
        
        val Word = binding.editText.text.toString()

        val Answer = dbHelp.getAnswer(Word)
        binding.transcribedVersion.text = Answer
    

我该如何解决这个问题?

【问题讨论】:

尝试通过将单引号替换为 '' 来转义它。所以“贝克”应该是“贝克” 【参考方案1】:

您可以使用双引号代替单引号,如下所示: select * from words where vocab = 'Baker''s'

【讨论】:

我收到了用户的查询,所以我不能手动修改他们输入的结构 @Aschente 您可以在将用户输入传递给查询之前对其进行处理。您可以从输入字段中获取文本,然后根据需要对其进行修改(例如在检测到引号的位置添加额外的引号)并将其传递给查询。【参考方案2】:

使用选择参数:

select * from words where vocab = ?

您可以稍后使用您的值绑定

val selectionArgs = arrayOf("Baker's")

更新

如果您使用的是rawQuery,那就是

db.rawQuery("select * from words where vocab = ?", arrayOf("Baker's"))

【讨论】:

我有一个类似的代码返回查询向用户询问: val cursor = db.rawQuery("select * from words where vocab = '$query'", null, null) 但是这是一个包含超过 500k 条目的字典,因此输入包括 ' 在内的数据将被证明是困难的,即使当用户输入数据库中不存在的单词(如“Aardvark's”)时,应用程序也会再次崩溃

以上是关于来自用户的 Android Studio SQLite 查询,包括“'”的主要内容,如果未能解决你的问题,请参考以下文章

防止SQL注入:来自Django作者的观点

Android Studio - 线程完成后从 SQLite 获取数据

Android 模拟器(来自 Android Studio)滞后

来自 API 的 Android Studio 数据

Android Studio - 如何使用库(来自 eclipse 项目)

如何:在 Android Studio 中安装插件