Java Sql 更新语句。处理引号中的 Null

标签 java sql sql-server null

我有一个 java 程序对表执行 SQL 更新:

 String qry = "UPDATE [Artists] SET [Website] = '" + artist.getWebsite() + "' WHERE [ID] = " + artist.getID() + "'";

如果 Artist.getWebsite() 为 null,则当我想将其保留为 SQL NULL 时,它会插入字符串“null”,因为引号的缘故。但我需要引号,因为大多数时候 Artist.getWebsite() 返回一个字符串。 处理这个问题最简单的方法是什么?

最佳答案

不要。使用。字符串。级联。到。 build 。 SQL。声明。造成这种情况的原因有很多,尤其是这个:

enter image description here

...空值就是这些原因之一。更多:http://bobby-tables.com这样做时真的很容易感到困惑(例如,您的示例末尾有一个额外的')。

让我们暂时忽略 null:如果您放入字符串中的值包含 ' 会怎样?现在您有一个损坏的 SQL 字符串。

相反,使用PreparedStatement:

PreparedStatement ps = conn.prepareStatement(
   "UPDATE [Artists] SET [Website] = ? WHERE [ID] = ?"
);
ps.setString(1, artist.getWebsite());
ps.setInt(2), artist.getID());

请注意,我们要放置字符串的 ? 周围没有引号; PreparedStatement 为您正确处理内容的引用和转义。

认为 setString 可以让您设置null,但我有一段时间没有做过 JDBC 的事情了。对于非字符串列,您可以使用 setNull ;如果 setString 不乐意这样做,您可能需要一个分支,例如:

PreparedStatement ps = conn.prepareStatement(
   "UPDATE [Artists] SET [Website] = ? WHERE [ID] = ?"
);
String web = artist.getWebsite();
if (web == null) {
    ps.setNull(1, JDBCType.NVARCHAR);
} else {
    ps.setString(1, web);
}
ps.setInt(2), artist.getID());

...但先尝试一下setString

关于Java Sql 更新语句。处理引号中的 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29183390/

相关文章:

Java - 格式化 double 组

java - 什么原因导致 "java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name ' 命令'可用作请求属性”?

php - 提取重复的 MySQL 交叉表

MySQL:更新 2 个表中的所有行匹配另一个查询的结果

sql - 防止任何表上的意外更新/删除

javascript - 在 SSRS 报告中包含外部 javascript 文件

java - 处理空条件(在 Sonar 中更改此条件,使其不总是评估为 "false")

sql - 每次写一个额外的列来查询不同值的结果

Asp.net - 捕获 SQL Server sql 错误的最佳位置

java - 如何让 IzPack 将程序添加到程序和功能