JDBC rs.getInt() 方法将null返回0,解决方案。

JDBC处理NULL值
本文介绍了一种在使用JDBC时正确处理数据库NULL值的方法,通过判断获取的对象是否为NULL来决定返回0还是NULL。
部署运行你感兴趣的模型镜像

JDBC ResultSet 的getInt, getLong, getDouble, getFloat等方法,不论数据库中是否存储为null,都返回0,或者0.0。


那如何才能返回null呢? 我个人是加上判断,代码如下:


ResultSet rs = statement.executeQuery("select Id from table");

Integer id = 0;

if( rs.getObject("Id") != null){

    id = rs.getInt("Id");

}

else{

   id = null;

}

这样就可以获得数据库中真实的值了。


您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

在 Java 中,当使用 `ResultSet` 对象的 `getInt(int columnIndex)` 方法(如 `rs.getInt(1)`)从结果集中获取数据时,如果数据库中对应的值为 `NULL`,该方法不会返回 `0`,而是会抛出 `SQLException`。这是因为 `int` 是 Java 的基本数据类型,它不能存储 `null` 值。 以下是一个示例代码,展示了这种情况: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Main { public static void main(String[] args) { try { // 建立数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "your_username", "your_password"); Statement stmt = conn.createStatement(); // 执行查询 ResultSet rs = stmt.executeQuery("SELECT your_column FROM your_table"); if (rs.next()) { try { int aa = rs.getInt(1); System.out.println("Value: " + aa); } catch (java.sql.SQLException e) { System.out.println("Error: " + e.getMessage()); } } // 关闭资源 rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 如果要处理可能为 `NULL` 的情况,建议使用 `getObject(int columnIndex)` 方法,然后检查返回值是否为 `null`,或者使用 `getInt(int columnIndex)` 方法后,再使用 `wasNull()` 方法来判断最后一次获取的值是否为 `NULL`。示例代码如下: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Main { public static void main(String[] args) { try { // 建立数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "your_username", "your_password"); Statement stmt = conn.createStatement(); // 执行查询 ResultSet rs = stmt.executeQuery("SELECT your_column FROM your_table"); if (rs.next()) { int aa; aa = rs.getInt(1); if (rs.wasNull()) { aa = 0; // 手动设置为 0 } System.out.println("Value: " + aa); } // 关闭资源 rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值