SQL & Java 使用 SQL 个字符时出错

SQL & Java Error with using SQL characters

我对 SQL 有一个问题,似乎无法解决。问题是当使用 sql 语句本身使用的特殊字符时,它根本不喜欢它。我试了很多东西都找不到答案。

该错误是由于在 SQL table.

中的文本中使用了 ' 字符引起的
NobleCore.getSQLStaticly().updateSQL("INSERT INTO Punishment (`ID`, `UUID`, `PlayerName`, `StaffName`, `Sev`, `pType`, `Reason`, `Activated`, `Ends`, `Active`, `RemoveReason`, `RemovedBy`) VALUES (NULL, '" + playerUUID + "', '" + player + "', '" + staffName + "' , '" + severity + "', '" + pType +"', '" + reason + "', CURRENT_TIMESTAMP,'" + end + "', '1', NULL, NULL );");

如您所见,当它向方法参数中的字符串添加 '" + reason + "' 时,它将出错导致语法异常,因为它包含 ' 字符。我怎样才能让它添加这个字符,以便它知道它是字符串的一部分而不是在语句中使用。

[17:28:29] [Server thread/WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ']', CURRENT_TIMESTAMP,'2015-02-26 17:58:29.708', '1', NULL, NULL )' at line 1

如果您需要任何其他代码,请告诉我,但我看不出它有什么帮助:P

变量 reason 中似乎有一个字符使您的 SQL 无效。使用准备好的语句来保存值。顺便说一句 NULL 值可以从查询中省略

这种情况下的通常做法是使用 PreparedStatement 而不是从头开始动态构建语句。

PreparedStatement 中,您将问号放在值所在的位置,然后使用各种 setXXX 方法用值填充它们。 setString() 方法,例如,为所讨论的数据库适当地转义给定值中的引号(即,基于 JDBC 驱动程序,可能有不同的转义引号的方式,并且 JDBC 自动为您完成此操作)。

如果您坚持自己构建查询,在 SQL 中转义引号的标准方法是将它们加倍。例如,如果您的值为 Sean O'Connor,则相应的引用值为 Sean O''Connor。很容易编写一个方法来将字符串中的每个单引号加倍。

但是,我再次建议您信任 JDBC 驱动程序的作者,并使用 PreparedStatement