Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSQLUPDATE语句。处理引号中的空值_Java_Sql_Sql Server_Null - Fatal编程技术网

JavaSQLUPDATE语句。处理引号中的空值

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()返回字符串。 处理

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

 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