JDBC处理SQL NULL值

JDBC 专栏收录该内容
3 篇文章 0 订阅

一、判断接收的值是否为空(SQL NULL)

  • 有时我们可以用接收到的值和java的null值比较来判断    

例子:

sql = "SELECT MGRNO FROM EMP";
     ........
String mgrno = rs.getString(1);
if (mgrno== null)
{ System.out.println ("\n MGRNO isnull \n");}

但是这种方法不总是有效,当使用getInt()和getShort()接收值时,若值为SQL NULL,会自动转换成0,将无法正确判断。

  • 这时我们使用ResultSet的接口方法wasNULL()方法来判断接受到的值是否为空,该方法返回值为Boolean类型。

例子:

Statementstmt = con.createStatement();
ResultSet rs = stmt.executeQuery
("SELECT EMPNO, LASTNAME, EDLEVEL " +
" FROM EMP " );
while ( rs.next() ) {
String eno = rs.getString(1);
String lname = rs.getString(2);
short edlvl = rs.getShort(3);
if ( rs.wasNull() )
{ System.out.println ("\n Edlevel is null for EMPNO \n");
System.out.println (eno);
} // end if
else
{ System.out.println ("\n Edlevel is: \n");
System.out.println ( edlvl );
System.out.println ("\n For EMPNO = \n");
System.out.println (eno);
} // end else

在上面例子中,会判断第三列EDLEVEL(SMALLINT类型)属性是否为SQL NULL。所以,wasNULL()方法会判断最后一个接收到的最后一个值是否为空。

二、向数据库传空值

  • stmt.setxxxxx (1, null);

例子:

PreparedStatementstmt = null;
sql = "UPDATE TEMPL SET PHONENO = ? "
+ "WHERE EMPNO = '000110' ";
stmt = con.prepareStatement(sql);
if (some condition)
{ stmt.setString (1, null);}
else
{ stmt.setString (1, newphone); }
updateCount = stmt.executeUpdate();

          这种方式适用范围有限,当setInt(1,null)或是setFloat(1,null)、setShort(1,null)时都无法通过编译。

          只有当类型为java对象时可以执行成功,例如setString(1,new String(null)、setBigDecimal(1,new BigDecimal(null))等。

  • 在sql语句中让字段值=null

          例子:  

If (somecondition is true)
{
sql = "UPDATE TEMPL"
+ "SET PHONENO =NULL"
+ "WHERE EMPNO = '000110'";
}
else
{ sql = "UPDATE TEMPL"
+ "SET PHONENO = ?"
+ "WHERE EMPNO = '000110'";}

          这种方式不关心字段的类型,适用于所有类型,但是不够灵活。

  • 最好的方法是使用ResultSet接口提供的setNULL()方法。

          例子:

PreparedStatement pstmt = null;
sql = "UPDATE EMP SET EDLEVEL = ? "
+ " WHERE EMPNO = '0000110' ";
pstmt = con.prepareStatement( sql );
if ( some condition )
{ pstmt.setNull (1,java.sql.Type.SMALLINT); }
else
{ pstmt.setShort( 1, 16 ); }
updateCount = pstmt.executeUpdate();

          setNULL()方法第二个参数,Java.sql.Types和db2类型的对应关系:

DB2类型

Java.sql.Types

bigint  

bigint 

character,graphic 

char 

clob

clob

date

date

decimal

decimal

double

double

integer

integer

longvargraphic、longvarchar

longvarchar

real

real

smallint

smallint

time

time

timestamp

timestamp

vargraphic

vargraphic

varchar

varchar

  • 1
    点赞
  • 0
    评论
  • 3
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

lihan.cs

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值