码迷,mamicode.com
首页 > 数据库 > 详细

Spring Jdbc

时间:2016-03-26 15:40:13      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

Spring Jdbc用法:

使用jdbcTemplate查询数据的时候可以使用queryForXXX等方法。下面我们就一一解析一下:
1、jdbcTemplate.queryForInt()和jdbcTemplate.queryForLong()
--使用queryForInt返回user表中的记录数量,queryForInt搭配这样的sql可以在分页的时候计算总记录数
jdbcTemplate.queryForInt("select count(*) from user");

2、jdbcTemplate.queryForObject()
--本质上和queryForInt相同,只是可以返回不同的对象,例如返回一个String对象
String name = (String) jdbcTemplate.queryForObject(  --3个参数,1、sql 2、要传递的参数数组 3返回来的对象class
"SELECT name FROM USER WHERE id = ?",  
new Object[] {id},  
java.lang.String.class);       

3、jdbcTemplate.queryForList(???)
--返回一个装有map的list,每一个map是一条记录,map里面的key是字段名
List rows = jdbcTemplate.queryForList("SELECT * FROM user");  --得到装有map的list
for(int i=0;i<rows.size();i++){                   --遍历
Map userMap=rows.get(i);
System.out.println(userMap.get("id"));  
System.out.println(userMap.get("name"));  
System.out.println(userMap.get("age"));
}


4、jdbcTemplate.queryForMap(SQL)
--这个查询只能是查询一条记录的查询,返回一个map,key的值是column的值
Map map = jdbcTemplate.queryForMap("select count(*) as keyval from user");
map.get("keyval")


5、jdbcTemplate.queryForRowSet(???)
--返回一个RowSet   然后调用.getString或者getInt等去取值




6、jdbc1.query(sql, new RowCallbackHandler()
--返回一个ResultSet对象, processRow有自动循环的机制,它会自动执行processRow中的语句直到
--rs的size执行完了为止。我们可以在这其中用list完成对象的转移,只不过list要用final来修饰
jdbc1.query(sql, new RowCallbackHandler() { //editing
            public void processRow(ResultSet rs) throws SQLException {
        VideoSearch vs = new VideoSearch();
        vs.setRECORDINGFILENAME(rs.getString("RECORDINGFILENAME"));
        vs.setCALLID(rs.getString("CALLID"));
        list.add(vs);

    }
    }

说明:
JDBCTemplate的使用方法:
在ApplicationContext.xml中定义一个jdbcTemplate的节点,使用POJO注入,获得注入后可以执行操作
不需要继承什么基类

<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">            
      <property name="dataSource" ref="dataSource"/>         
</bean>

SqlRowSet rs = jdbcTemplate.queryForRowSet(sql, params);
jdbcTemplate有很多的ORM化回调操作将返回结果转为对象列表,
但很多时候还是需要返回ResultSet,Spring有提供一个类似ResultSet的,实现JDBC3.0 RowSet接口的Spring SqlRowSet
注意
 
 

jdbcTemplate没有queryForString方法。

利用spring 的getJdbcTemplate().queryForMap如果返回空集,就会报 
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 的异常,解决办法就是捕捉这个异常然后返回null即可。 
Java代码  技术分享
  1. try{  
  2.             return getJdbcTemplate().queryForMap("select s.fb,s.pb,s.tu,s.qt,s.fbc,s.pbc,s.tt,s.ft,s.lt from gbc$view_user s where s.ud = ? and ad= ?", new Object[]{ud,ad});  
  3.         }catch (EmptyResultDataAccessException e) {  
  4.             return null;  
  5.         }  
 

 

解决方案 在queryForMap的地方 try catch 一下 即可。

// hack
@Override
public Map<String, Object> queryForMap(String sql, Object... args) {
List<Map<String, Object>> result = queryForList(sql, args);
if (result != null && result.size() > 0)
return result.get(0);
else
return null; // or new HashMap<String, Object>();
}


 
public List<List<Object>> queryForArrays(String sql, Object... args) {
f  inal List<List<Object>> arrays = new ArrayList<List<Object>>();
  jdbcTemplate.query(sql, args, new RowCallbackHandler() {
// 不需要手动调用rs.next
 
public void processRow(ResultSet rs) throws SQLException {
List<Object> row = new ArrayList<Object>();
int count = rs.getMetaData().getColumnCount();
for (int col = 1; col <= count; col++) {
row.add(rs.getObject(col));
}
arrays.add(row);
}
});
return arrays;
}

 

Spring Jdbc

标签:

原文地址:http://www.cnblogs.com/youxin/p/5322808.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!