来自用户的 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 查询,包括“'”的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio - 线程完成后从 SQLite 获取数据
Android 模拟器(来自 Android Studio)滞后