MySQL使用“IS NULL”而不是“NULL”,那么如何绑定变量来实现相同的呢?
现在我尝试了这个
selectStmt.setNull( 2, java.sql.Types.VARCHAR );
当我打印“java.sql.Types.VARCHAR”时显示值= 12?如果是这样,这在preparestatment中如何设置“IS NULL”?
更详情:
即如果输入中有string =“”,我感兴趣的是查询(MySQL)null。所以逻辑是这样的,
Connection c = SQLCon.connect();
PreparedStatement selectStmt = c.prepareStatement( "select * from "
+ TableName
+ " where P = ? AND M = ? AND PR = ? AND DR = ? " );
if ( P.trim().equals( "" ) )
{
selectStmt.setNull( 1, java.sql.Types.VARCHAR );
} else
{
selectStmt.setString( 1, P );
}
if ( M.trim().equals( "" ) )
{
selectStmt.setNull( 2, java.sql.Types.VARCHAR );
} else
{
selectStmt.setString( 2, M );
}
请咨询
答案 0 :(得分:6)
如果要将where子句中可能为null的列与可能为null的参数进行匹配,实际上需要将其绑定两次,因为在SQL中,null与其他任何内容都不相等,甚至是另一个null。
PreparedStatement stmt = conn.prepareStatement("select * from foo where (? is null and bar is null) or (bar = ?)");
col = 1;
setVarchar(stmt, col++, var);
setVarchar(stmt, col++, var);
void setVarchar(PreparedStatement stmt, int col, String var)
{
if (var == null)
stmt.setNull(col, java.sql.Types.VARCHAR);
else
stmt.setString(col, var);
}
答案 1 :(得分:2)
这看起来很奇怪,但你做到了:
if (variable == null) {
selectStmt.setNull(2, java.sql.Types.VARCHAR);
} else {
...
}
这背后的原因是因为NULL
是数据库中的值,而Java中的值不是null
。有时,您需要区分从数据库返回NULL
而不是从数据库中取回任何内容。
答案 2 :(得分:0)
它是一个xml输入,在UI用户上看到空白为NULL,因此发送空白作为输入
if ( P.trim().equals( "" ) )
{
sql += "P IS NULL";
}
else
{
sql += "P = ?";
}
PreparedStatement selectStmt = c.prepareStatement( sql );
int i = 1;
// used to prevent index out of range issues
// Binding values for non-null strings ONLY
if ( !(P.trim().equals( "" )) )
{
selectStmt.setString( i, P );
i++;
}