解决Java中int不能为空而Oracle数据库中Number可以的问题

前言:空(NULL)和零(0)一样吗?当然不。Null表示不存在或不确定,0表示没有。

在应用Hibernate开发中遇到了一个问题:Oracle数据库中某字段(Number类型)没有值(即NULL),其映射的JavaBean对应属性为int类型。在获取数据时,提示“将NULL值赋给基本类型失败”的错误。怎么解决呢?对我这个.NET转Java的新手来说还真有点晕。

 

1.先来谈谈int和Integer

int永远也不会为空,因为它是primitive数据类型。初始时缺省为0,而不是null。
Integer是对象类,倒可能是null。

因此
int i1;
Integer i2;

此时
i1==0  为true
i2==0  会出错吧
i2==null为true

 

2.修改int为Integer的解决方案

将配置文件改为:<property name="a252" type="java.lang.Integer">

JavaBean中做以下修改:

3.JDBC的解决方案

 

4.装箱、拆箱及其他

类型转换是在1.5中才有的。在明白怎么进行判断之前,我们必须明白所谓的类型转换到底是什么东西。在1.5之前,你如果需要把一个int转换为Integer,你就必须做new Integer(intValue);这样的代码工作。因此在1.5中,Java的缔造者们认为这种方法过于低效率,因此引入了C#中的auto-boxing理念,因此你可以用类型转换的方法创造出一个Integer类实例。但是,其中的原理还是和以前一致的。因为在int类型中,永远不可能有null的取值,因此也不可能生成一个null的Integer对象。

另外可以强制转换下,也就是 (Object)int x == null;

 

参考资料:

  1. 判断一个int是否为空的方法!
  2. java包装类自动装箱和拆装小知识
  3. jdk5的拆箱与装箱
  4. Java JDK:自动装箱和拆箱
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,以下是一个使用Java连接Oracle数据库,通过JSP和Servlet实现的简单网页小报表的示例代码: 1. 首先,在Oracle数据库创建一个示例表: ```sql CREATE TABLE users ( id NUMBER(10) PRIMARY KEY, name VARCHAR2(50), age NUMBER(3) ); INSERT INTO users VALUES (1, 'Tom', 20); INSERT INTO users VALUES (2, 'Jerry', 22); INSERT INTO users VALUES (3, 'Alice', 24); ``` 2. 然后,创建一个Java类,用于执行SQL查询并返回结果: ```java import java.sql.*; public class DatabaseQuery { public static Connection getConnection() throws Exception { Class.forName("oracle.jdbc.driver.OracleDriver"); return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "username", "password"); } public static ResultSet getUsers() throws Exception { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = getConnection(); stmt = conn.prepareStatement("SELECT id, name, age FROM users"); rs = stmt.executeQuery(); return rs; } catch (SQLException se) { se.printStackTrace(); return null; } } } ``` 上面的代码,getConnection()方法用于获取数据库连接,getUsers()方法用于执行查询并返回结果集。 3. 接下来,创建一个Servlet,用于处理HTTP请求并生成HTML响应: ```java import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class ReportServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>用户报表</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>用户报表</h1>"); out.println("<table>"); out.println("<tr>"); out.println("<th>ID</th>"); out.println("<th>姓名</th>"); out.println("<th>年龄</th>"); out.println("</tr>"); try { ResultSet rs = DatabaseQuery.getUsers(); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); out.println("<tr>"); out.println("<td>" + id + "</td>"); out.println("<td>" + name + "</td>"); out.println("<td>" + age + "</td>"); out.println("</tr>"); } rs.close(); } catch (Exception e) { e.printStackTrace(); } out.println("</table>"); out.println("</body>"); out.println("</html>"); } } ``` 上面的代码,doGet()方法生成一个简单的HTML表格,用于显示用户数据。它通过调用DatabaseQuery类的getUsers()方法获取结果集,并将每行数据生成为一个HTML表格行。 4. 最后,在JSP页面将Servlet嵌入到HTML: ```html <html> <head> <title>用户报表</title> </head> <body> <h1>用户报表</h1> <iframe src="ReportServlet" width="100%" height="400"></iframe> </body> </html> ``` 上面的代码,<iframe>标签用于将ReportServlet嵌入到HTML,以便在页面显示报表。 注意:在实际开发,你需要将用户名和密码替换为你自己的数据库用户名和密码,并根据需要修改查询语句和HTML代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值