java - 在 JAVA 中为 MySQL PreparedStatment 绑定(bind) NULL?

标签 java mysql data-binding prepared-statement

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/

相关文章:

php - 使用 MySQL 和 PHP 的个人帖子/文章的图像

javascript - 如何插入单选按钮的选中值,该值是来自php中另一个表的数组

java - 如何在java中将接收到的字节显示为文本?

java - 无法解析符号 'Immutable'

如果值不存在,则 Mysql 更新

WPF 数据绑定(bind)被 FocusManager 破坏 - 为什么?

scala - 当我使用 Binding.scala 时,出现错误 `each instructions must be inside a SDE block` ,我该如何解决?

java - 不存在类型变量 Y 的实例,因此 Calendar 符合 LiveData<Y>

Java 正则表达式模式问题

data-binding - 绑定(bind)到动态生成的组件/元素的可绑定(bind)属性