Spring jdbc getJdbcTemplate() queryForObject如何返回对象

问题描述

这是我的代码 希望您花几分钟不到的时间帮我看一下 我搞了1天了 楞是不明白一运行就报异常捕获在持久层:Incorrect column count: expected 1, actual 3这个错误 结果网上搜不到这个异常是个什么 public User IsQueryOne(String id) throws Exception {try{User user= (User) this.getJdbcTemplate().queryForObject("select * from test where id="+id,User.class);return user;}catch(Exception e){System.out.println("异常捕获在持久层:"+e.getMessage());}return null;}网上有很多介绍SPRING MVC的例子 但是多半几乎是一个例子占了谷歌的前2页。。在往后搜就是IBATIS了 所以请高手给看一下 那个User.class是一个POJO类 我希望查询完毕后可以返回一个user对象 毕竟我这个是按ID查的 就一条记录 就是不明白为什么会错问题补充:知道是怎么回事了 这个方法看起来以为和HIBERNATE的一样 结果是完全不同 需要写一个类 public class UserRowMapper implements RowMapper {public Object mapRow(ResultSet rs, int value) throws SQLException {User user = new User();user.setId(new Integer(rs.getInt("id")));user.setUsername(rs.getString("username"));user.setAge(rs.getString("age"));return user;}}然后在我的方法里直接返回 public User IsQueryOne(String id) throws RuntimeException { String sql="select * from test where id="+id; //现在你看到了我们写的UserRowMapper这个类是多么的方便 return (User) this.getJdbcTemplate().queryForObject(sql,new UserRowMapper());}刚玩这个 下来搞搞AOP了。。。不然acegi搞起来有难度....哎~~无聊呃。。。。

解决方案

需要使用RowMapper在你的程序中,Spring并不知道如何将结果转成User.class。可以参考http://www.blogjava.net/pigbaby520/articles/217394.html?opt=admin
解决方案二:
已经错了你把你的sql语句打印出来 查询一下看看你的错误信息Incorrect column count: expected 1, actual 3实际上有三条记录了~
解决方案三:
queryForObject只能返回一条记录的~它使用了DataAccessUtils.singleResult(list);DataAccessUtils.singleResult()方法 抛出的异常不影响你项目运行 只是通知你 你的结果数目大于1了~你看下源代码就知道了~

时间: 2024-09-20 14:58:58

Spring jdbc getJdbcTemplate() queryForObject如何返回对象的相关文章

Spring JDBC抽象框架简化Web数据库开发

web|数据|数据库 一. 引言 Spring是一个轻量级的应用程序框架.在许多情况中,Spring都能够良好地代换传统的由Java EE应用程序服务器所提供的服务.Spring既是综合性的也是模块化的.基于其分层架构,它能够使开发者灵活地单独使用其任何一部分.Spring由许多模块组成,例如IoC容器,AOP,MVC,持久性,DAO和remoting.这些模块都是相当松耦合的:其中,一些模块的使用根本不需要另一些模块.以前,简直还没有象Spring应用程序这样的:你可以选择使用一些,大多数,或

Java的Spring框架中DAO数据访问对象的使用示例_java

Spring DAO之JDBC  Spring提供的DAO(数据访问对象)支持主要的目的是便于以标准的方式使用不同的数据访问技术, 如JDBC,Hibernate或者JDO等.它不仅可以让你方便地在这些持久化技术间切换, 而且让你在编码的时候不用考虑处理各种技术中特定的异常. 为了便于以一种一致的方式使用各种数据访问技术,如JDBC.JDO和Hibernate, Spring提供了一套抽象DAO类供你扩展.这些抽象类提供了一些方法,通过它们你可以 获得与你当前使用的数据访问技术相关的数据源和其他

java中Spring jdbc批量保存数据例子

数据list:list.add(bcHistory); 批量插入:  代码如下 复制代码 try {     jt.batchUpdate(     "insert into b_chat_history (id,from_phone,from_user,to_phone,to_user,type,msg,url,thumb,length,timestamp) value (?,?,?,?,?,?,?,?,?,?,?)",     new BatchPreparedStatementS

【Spring实战】—— 15 Spring JDBC模板使用

前一篇通过对传统的JDBC的使用操作,可以体会到使用的繁琐与复杂,套句话说,是用了20%作了真正的工作,80%作了重复的工作. 那么通过本篇,可以了解如下的内容: 1 如何配置数据源 2 如何在spring中使用模板 3 如何建立数据源的统一的基类 首先看一下如何配置数据源 我们可以使用3种方式配置数据源: 1 JNDI配置数据源 这种做法我是没用过,感觉每次都要去修改配置Tomcat之类的web容器,很是麻烦. 2 使用DBCP数据源连接池 一般情况下都是采用这种方式,对于连接池的实现,也有很

mysql-连接池。 DriverManager.getConnection()返回对象不变。。

问题描述 连接池. DriverManager.getConnection()返回对象不变.. public static void main(String[] args) throws Throwable { JDBCUtil jdbc=new JDBCUtil(); jdbc.getConnection(); jdbc.getConnection(); } public void getConnection() { Connection conn = null; try { Class.fo

spring jdbc 连接错误,急求大神解答

问题描述 spring jdbc 连接错误,急求大神解答 错误信息:java.lang.NoClassDefFoundError: Could not initialize class org.springframework.jdbc.core.StatementCreatorUtils 代码: package com.xiaoming.spring.jdbc.dao; import javax.annotation.Resource; import javax.sql.DataSource;

使用spring jdbc template简化jdbc数据库操作实例代码

文章地址: http://blog.csdn.net/5iasp/article/details/12206793 作者: javaboy2012 Email:yanek@163.com qq:    1046011462   使用spring jdbc template简化jdbc数据库操作实例代码   包括如下几个类:   1. DAO接口   package com.test; import java.util.List; import org.springframework.jdbc.c

spring jpa 实体互相引用返回restful数据循环引用报错的问题

spring jpa 实体互相引用返回restful数据循环引用报错的问题 Java实体里两个对象有关联关系,互相引用,比如,在一对多的关联关系里 Problem对象,引用了标签列表ProblemLabel ProblemLabel对象,引用了所属Problem 这样构成了互相引用,导致递归循环内存溢出异常: org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: I

Spring JDBC Template

Spring为我们提供了JDBC的模板来连接数据库,Spring JDBC Template. 使用: 第一,导入相关的jar包 第二,要连接数据库首先要加载驱动,获得连接,然后才能进行相关的数据库操作,由于连接对象的创建和销毁会浪费时间,所以我们采用连接池来对链接进行管理,将创建好的连接放入连接池使用时直接从连接池中取用完后还给链接池就可以,节省大量时间.而连接池我们一般使用C3P0连接池. 第三,我们使用Spring对连接池和连接对象进行控制反转也就是连接池和连接对象实例由Spring帮我们