Jdbc常用操作总结
来源:互联网 发布:c语言数组初值 编辑:程序博客网 时间:2024/06/06 01:46
一、查询
当我们从数据库查询数据时,使用jdbc有多种方法,比如SqlRowSet、List<Map<String, Object>>等。
List<Map<String, Object>>的用法如下:
String sql = "SELECT * FROM TAB_TEST";MapSqlParameterSource params = new MapSqlParameterSource();List<Map<String, Object>> ret = this.namedParameterJdbcTemplate.queryForList(sql, params);Iterator<Map<String, Object>> iter = ret.iterator();while (iter.hasNext()) { Map<String, Object> item = iter.next(); String dataId = (String)item.get("DATA_ID"); String dataName = (String)item.get("DATA_NAME"); // 其他读取操作}上述代码存在的问题是:将Oracle类型转换为Java类型时某些类型会发生异常,比如NUMBER -> Integer
SqlRowSet的用法如下:
String sql = "SELECT * FROM TAB_TEST";MapSqlParameterSource params = new MapSqlParameterSource();SqlRowSet rs = this.namedParameterJdbcTemplate.queryForRowSet(sql, params);while (rs.next()) {try {String dataId = rs.getString("DATA_ID"); if(rs.wasNull) { dataId = null; } String dataName = rs.getString("DATA_NAME"); if(rs.wasNull) {//注意这里的为空判断必须在上一句的getXXX之后进行 dataName = null; } // 其他读取操作} catch (InvalidResultSetAccessException e) {e1.printStackTrace();logger.error(e.getMessage());} catch (SQLException e) {e1.printStackTrace();logger.error(e.getMessage());}}
上述代码,可以避免第一段代码中的异常问题,需要注意的是,如果仅仅使用rs.getXXX(key),而不进行其后的wasNull判断,即使字段为null,也会得到一个默认值(这种情况有利有弊,通常认为弊大于利),另外一点,re.wasNull要在getXXX之后调用,否则rs.wasNull无效。
public static <T> T getDbValue(Class<T> type, T t, SqlRowSet rs) throws SQLException {return (rs.wasNull()) ? null : t;}
优化后的代码为:
String sql = "SELECT * FROM TAB_TEST";MapSqlParameterSource params = new MapSqlParameterSource();SqlRowSet rs = this.namedParameterJdbcTemplate.queryForRowSet(sql, params);while (rs.next()) {try {String dataId = getDbValue(String.class, rs.getString("DATA_ID"), rs); String dataName = getDbValue(String.class, rs.getString("DATA_NAME"), rs); // 其他读取操作} catch (InvalidResultSetAccessException e) {e1.printStackTrace();logger.error(e.getMessage());} catch (SQLException e) {e1.printStackTrace();logger.error(e.getMessage());}}
总体感觉,使用SqlRowSet要优于List<Map<String, Object>>
0 0
- Jdbc常用操作总结
- 【JDBC】常用操作
- jdbc常用代码总结
- JDBC操作总结
- JDBC操作总结
- JDBC操作总结
- JDBC+Access的常用操作
- JDBC中常用的SQL总结01之与表中的数据有关的基本操作
- Subversion常用操作总结
- DataTable常用操作总结
- DataTable常用操作总结
- Oracle 常用操作总结
- DataTable常用操作总结
- mysql常用操作总结
- git常用操作总结
- DataTable常用操作总结
- MySQL 常用操作总结
- oracle常用操作总结
- 微信第三方登录集成
- MySQL存储过程调试工具
- 理解iOS7的Multipeer Connectivity框架
- Java新特性
- PAT (Basic Level) Practise (中文)1052. 卖个萌 (20)
- Jdbc常用操作总结
- 算法四 第一章第一节基础习题
- 数据驱动来控制界面
- AllJoyn核心应用教程【第六章】:Base Services服务之Notification
- 剑指Offer——扑克牌的顺子
- 初识XML
- Java 远程通讯技术及原理分析
- Tomcat配置Jconsole , JvisualVm 监控配置
- window下安装redis以及配置phpredis