JavaSQLUPDATE语句。处理引号中的空值
我有一个java程序对一个表执行SQL更新:JavaSQLUPDATE语句。处理引号中的空值,java,sql,sql-server,null,Java,Sql,Sql Server,Null,我有一个java程序对一个表执行SQL更新: String qry = "UPDATE [Artists] SET [Website] = '" + artist.getWebsite() + "' WHERE [ID] = " + artist.getID() + "'"; 如果artist.getWebsite()为null,则会插入字符串“null”,因为我只想将其保留为SQL null,而使用引号。但是我需要引号,因为大多数时候artist.getWebsite()返回字符串。 处理
String qry = "UPDATE [Artists] SET [Website] = '" + artist.getWebsite() + "' WHERE [ID] = " + artist.getID() + "'";
如果artist.getWebsite()为null,则会插入字符串“null”,因为我只想将其保留为SQL null,而使用引号。但是我需要引号,因为大多数时候artist.getWebsite()返回字符串。
处理此问题的最简单方法是什么?在执行和更新时使用.NULLIF(“+artist.getWebsite()+”,“NULL”…
。有关运算符的详细信息:
这将返回实际空值
SELECT NULLIF('NULL', 'NULL')
不要使用.String.Concatenation.To.Build.SQL.Statements。这有几个原因,尤其是这个原因: …和空值是其中的一个原因。更多:这样做时也很容易混淆(例如,您的示例末尾有一个额外的
“
)
让我们暂时忽略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
s,但我已经有一段时间没有做JDBC了。对于非字符串列,您可以使用;如果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
一次尝试。如果您使用JDBC,您应该始终尝试使用准备好的语句,而不仅仅是手动连接语句。特别是,对准备好的语句使用setNull()方法将在查询中插入SQL NULL
使用准备好的语句还可以帮助您保护应用程序免受SQL注入攻击
请查看以下链接:请查看
PreparedStatement
s。您的代码易受SQL注入攻击。好的,谢谢。我们将查看PreparedStatements