android - 哪些字符不能用于 SQLite 数据库中的值?

标签 android sql database sqlite character

我正在制作一个 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/

相关文章:

android - 检查数组列表是否在android中多次包含一个值

SQL - 如何检索一列中排名最高的行,而另一列中具有多个重复行

sql - SQL Server 存储过程的语法错误

.net - 频繁更改数据库的最佳 .NET 解决方案

java - 我无法在应用程序中读取 JSON

带有图像错误的 Android 抽屉导航

java - 将 Playbuzz 嵌入脚本加载到 Android 中的 WebView 中

sql - Oracle 分页查询中的列无效?

python - 修改 Django 模型有多难?

php - 如何在不在查询中定义的情况下获取所有表列?