MySQL 使用“IS NULL”而不是“NULL”,那么我如何绑定(bind)变量以实现相同的效果?
现在我试过这个
selectStmt.setNull( 2, java.sql.Types.VARCHAR );
当我打印“java.sql.Types.VARCHAR”时显示值 = 12?如果是这样,如何在 preparedstatment 中设置“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 );
}
请多多指教
最佳答案
如果要将 where 子句中可能为 null 的列与可能为 null 的参数匹配,实际上需要将其绑定(bind)两次,因为在 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);
}
关于java - 在 JAVA 中为 MySQL PreparedStatment 绑定(bind) NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11961486/