jdbcTemplate的queryForList

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的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尽量只执行查询操作,莫要进行更新,否则会破坏Hibernate的二级缓存体系
     

    posted on   王大王  阅读(11107)  评论(0编辑  收藏  举报

    编辑推荐:
    · 基于Microsoft.Extensions.AI核心库实现RAG应用
    · Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
    · 开发者必知的日志记录最佳实践
    · SQL Server 2025 AI相关能力初探
    · Linux系列:如何用 C#调用 C方法造成内存泄露
    阅读排行:
    · 震惊!C++程序真的从main开始吗?99%的程序员都答错了
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 单元测试从入门到精通
    · 上周热点回顾(3.3-3.9)
    · Vue3状态管理终极指南:Pinia保姆级教程

    导航

    < 2025年3月 >
    23 24 25 26 27 28 1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 31 1 2 3 4 5
    点击右上角即可分享
    微信分享提示