Java Sql Update语句。处理引号中的空值

时间:2015-03-21 13:42:07

标签: java sql sql-server null

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

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

如果artist.getWebsite()为null,则插入字符串' null'因为我想把它留作SQL NULL的引号。但是我需要引号,因为大多数时候artist.getWebsite()返回一个字符串。 处理这个问题的最简单方法是什么?

3 个答案:

答案 0 :(得分:2)

别。使用。串。级联。至。建立。 SQL。声明。这有几个原因,尤其是这一个原因:

enter image description here

...和nulls是其中一个原因。更多: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。对于非String列,您可以使用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先行。

答案 1 :(得分:0)

执行和更新时使用..NULLIF('" + artist.getWebsite() + "', ''NULL''...。有关运营商的更多信息:https://msdn.microsoft.com/en-us/library/ms177562.aspx

这将返回实际的NULL

SELECT NULLIF('NULL', 'NULL')

答案 2 :(得分:0)

如果使用JDBC,则应始终尝试使用预准备语句,而不是仅手动连接语句。特别是,在预准备语句中使用setNull()方法将在查询中插入SQL NULL。

使用预准备语句还可以帮助您保护应用程序免受SQL注入攻击。

请参阅以下链接:http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html