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

Ros*_*nal 5 sql database sqlite android character

我正在制作Android应用程序而且我使用了SQLite数据库.但我发现如果你输入单引号(')等字符(也用作主键),数据将无法正确保存/检索.

这是我的问题还是真的?如果真的有更多这样的人物?

谢谢.

@bdares和@mu感谢您的提示,但是请您告诉我如何在SQLite中使用占位符和/或预处理语句?

我之前总是使用直接字符串连接,但现在看来这是一个不好的做法,我想使用预处理语句和/或占位符.

小智 4

您可能会遇到诸如 ASCII STOP 之类的字符和此类非打印字符的问题,但如果您使用准备好的语句和参数绑定,即使使用诸如'.

如果您不想使用参数绑定和准备好的语句,您可以将所有输入替换'\',就可以了。

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();
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不知道您将使用哪个库从 Android 访问 sqlite,所以目前我无法向您提供更多详细信息。