gpt4 book ai didi

java - SQLiteDatabase android 中的特殊字符

转载 作者:行者123 更新时间:2023-12-01 07:05:55 25 4
gpt4 key购买 nike

我即将完成我的第一个 Android 应用程序。但我一直想知道如何在 SQLite 数据库中保存特殊字符。

当我从编辑 View 中获取数据并将该数据放入数据库时​​,我可以输入所有特殊字符而无需处理任何内容。例如。

EditText editText1 = (EditText) findViewById(R.id.user_name);
String name = editText1.getText().toString();
db.execSQL("INSERT INTO DETAILS VALUES('" + name + "');");

现在是问题

即使我输入)、(、"、*或任何其他特殊字符,它也能够插入该数据但是一旦我输入'(撇号),就会出现错误(日志显示语法)。我已经阅读了 stackoverflow 上几乎所有与特殊字符相关的问题,但我仍然无法理解即使使用 ( 或 ) 或 "也会生成语法错误,与撇号的情况相同。那么为什么会发生这种情况。即使它对我有用,但我很好奇。另外,转义这些特殊字符的最佳方法是什么?

提前致谢

最佳答案

不要为此使用execSQL()!

SQLiteDatabase.insert()将为您构建语句,并避免参数中特殊字符的任何问题。

ContentValues values = new ContentValues();
values.put("FIELD_NAME", name);
db.insert("DETAILS", null, values);

要了解发生了什么,只需检查添加参数后生成的 SQL 语句是什么:

  • name = Scarlett -> INSERT INTO DETAILS VALUES('Scarlett');(确定)
  • name = O'Hara -> INSERT INTO DETAILS VALUES('O'Hara');(错误)

由于撇号是 SQL 中的字符串分隔符,因此存在一个 'O' 字符串加上 Hara',这不是有效的标记。在这种情况下,它只会产生一个错误,但恶意制作的字符串可能会产生有效的 SQL,从而执行意想不到的操作。

这就是为什么在编写 SQL 语句时连接字符串是一种非常糟糕的做法 (TM),因为它可能会导致 SQL Injection 。记住鲍比·泰 boolean 斯的故事!

enter image description here

关于java - SQLiteDatabase android 中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24589411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com