jdbcTemplate的queryForList的使用方法如下,它不一样的地方是,它获得的结果,会再放到一个map里去:
List rows = jdbcTemplate.queryForList("SELECT * FROM USER"); Iterator it = rows.iterator(); while(it.hasNext()) { Map userMap = (Map) it.next(); System.out.PRint(userMap.get("user_id") + "/t"); System.out.print(userMap.get("name") + "/t"); System.out.print(userMap.get("sex") + "/t"); System.out.println(userMap.get("age") + "/t"); }
我的一个例子中,得到的结果只有一列数字类型的数据(targer_id),但使用queryForList得到的结果集个数与数据库的内容一致,但每一项都是null。不清楚其原因,修改成
jdbcTemplate.query(sql,
才能正确得到结果。
附上带用的一些方法
使用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的listfor(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尽量只执行查询操作,莫要进行更新,否则会破坏hibernate的二级缓存体系
新闻热点
疑难解答