【问题标题】: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
    }

我该如何解决这个问题?

【问题讨论】:

  • 尝试通过将单引号替换为 '' 来转义它。所以“贝克”应该是“贝克”

标签: android android-studio kotlin


【解决方案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”)时,应用程序也会再次崩溃
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
相关资源
最近更新 更多