我正在制作一个 Android 应用程序并且我使用了一个 SQLite 数据库。但我发现,如果您键入单引号 (') 等字符(也用作主键),数据将无法正确保存/检索。
是我的问题还是真的?如果是真的,还有更多这样的角色吗?
谢谢。
@bdares 和@mu 感谢您提供提示,但是您能告诉我如何在 SQLite 中使用占位符和/或准备好的语句吗?
我以前一直使用直接字符串连接,但现在,这似乎是一种不好的做法,我想使用准备好的语句和/或占位符。
最佳答案
可能你会遇到诸如 ASCII STOP 之类的字符和此类非打印字符的问题,但是如果你使用准备好的语句和参数绑定(bind),即使是 '
这样的字符你也不会有任何问题.
如果您不想使用参数绑定(bind)和准备好的语句,您可以将所有输入 '
替换为 \'
就可以了。
SQL 通常使用 '
作为其特殊字符来指示字符串文字何时开始或停止。如果您的输入包含此字符,它将停止将当前行视为字符串并开始将其视为命令。这不是一件好事,安全明智。它还会阻止您输入该字符,除非您通过在它前面放置一个反斜杠来“转义”它,这告诉 SQL 忽略 '
并继续将以下字符视为字符串,直到未转义 '
满足。当然,反斜杠文字也被转义为双反斜杠。
准备好的语句通常如下所示:
String sql = "INSERT INTO MYTABLE (NAME, EMP_NO, DATE_HIRED) VALUES (?, ?, ?)";
PreparedStatement ps = sqlite.prepareStatement(sql);
ps.setString(1, myString);
ps.setInt(2, myInt);
ps.setDate(3, myDate);
ps.executeUpdate();
很遗憾,我不确切知道您将使用哪个库从 Android 访问 sqlite,因此目前无法为您提供更多详细信息。
关于android - 哪些字符不能用于 SQLite 数据库中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7267916/