今天在使用JdbcDaoSupport的以下方法
getJdbcTemplate().query(String sql,Object[] args,ResultSetExtractor rse)
时出现错误,看了很久才发现原来不过是一个低级错误
List<Object> args = new ArrayList<Object>();
if (condition.getFdate() != null) {
args.add(condition.getFdate());
}
if (condition.getChId() != null) {
args.add(condition.getChId());
}
if(condition.getPostTypeCode() != null){
args.add(condition.getPostTypeCode());
}
if (condition.getPlanType() != null) {
args.add(condition.getPlanType());
}
return (List<RecData>) super
.query(needSql, recData,args);
原因:未将args转化为Object[],因为args是List<Object>类型而非Objec[]类型,故弹出以下错误:
解决方法:将语句改为return (List<RecData>) super.query(needSql, recData,args.toArray());即可
2010-08-07 14:14:47,244 ERROR[com.dayee.wintalent.framework.web.interceptor.ExceptionInterceptor] - PreparedStatementCallback; uncategorized SQLException for SQL [SELECT T.F_DATE N_DATE,T.F_POST_TYPE_CODE N_POSTTYPECODE,T.F_CHANNEL_ID N_CHID,T1.F_CHANNEL_DID N_CHDID,T1.F_PLAN_TYPE N_PLANTYPE,T1.F_YEAR_MOTH N_YEARMONTH,T2.F_INSURANCE_CODE N_INSCODE,T2.F_PERSON_NUM N_PERNUM FROM WINTALENT3.T_RECRUITPLAN T,T_RECRUITPLAN_RELATION T1,T_RECRUITPLAN_INSURANCE T2 WHERE 1=1 AND T.F_DATE = ? AND T.F_CHANNEL_ID = ? AND T.F_POST_TYPE_CODE = ? AND T1.F_PLAN_TYPE = ? AND T1.F_REC_RELATION_ID=T.F_ID AND T2.F_REL_RELATION_ID=T1.F_ID ORDER BY T.F_CHANNEL_ID,T1.F_CHANNEL_DID ASC]; SQL state [null]; error code [17004]; 无效的列类型; nested exception is java.sql.SQLException: 无效的列类型
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT T.F_DATE N_DATE,T.F_POST_TYPE_CODE N_POSTTYPECODE,T.F_CHANNEL_ID N_CHID,T1.F_CHANNEL_DID N_CHDID,T1.F_PLAN_TYPE N_PLANTYPE,T1.F_YEAR_MOTH N_YEARMONTH,T2.F_INSURANCE_CODE N_INSCODE,T2.F_PERSON_NUM N_PERNUM FROM WINTALENT3.T_RECRUITPLAN T,T_RECRUITPLAN_RELATION T1,T_RECRUITPLAN_INSURANCE T2 WHERE 1=1 AND T.F_DATE = ? AND T.F_CHANNEL_ID = ? AND T.F_POST_TYPE_CODE = ? AND T1.F_PLAN_TYPE = ? AND T1.F_REC_RELATION_ID=T.F_ID AND T2.F_REL_RELATION_ID=T1.F_ID ORDER BY T.F_CHANNEL_ID,T1.F_CHANNEL_DID ASC]; SQL state [null]; error code [17004]; 无效的列类型; nested exception is java.sql.SQLException: 无效的列类型
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:607)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:641)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:670)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:678)
at com.dayee.wintalent.framework.dao.jdbc.MappingDaoImpl.query(MappingDaoImpl.java:104)
分享到:
相关推荐
然后,你可以使用`getJdbcTemplate().query(...)`等方法执行SQL语句。例如: ```java public class UserDAO extends JdbcDaoSupport { public List<User> getUsers() { String sql = "SELECT * FROM users"; ...
- 使用`getJdbcTemplate().queryForList(sql, args)`方法来执行查询操作。 - `sql`参数为查询SQL语句,`args`为查询参数。 - 查询结果被封装成Map列表返回。 2. **查询所有记录(queryAll)** - **方法定义**:`...
List<User> userList = getJdbcTemplate().query(sql, new BeanPropertyRowMapper(User.class), primaryKeyId); if(userList.size() == 0) { return null; } return userList.get(0); } @Override public ...
Spring JDBC的使用方法详解 Spring JDBC是Spring框架中的一部分,提供了对数据库的访问和操作。它提供了一个简单、灵活、可扩展的方式来访问数据库。下面将详细介绍Spring JDBC的使用方法详解。 为什么使用Spring...
return getJdbcTemplate().query("select * from person", new RowMapper() { public PersonPo mapRow(ResultSet rs, int rowNum) throws SQLException { PersonPo p = new PersonPo(); p.setName(rs.getString...
即使只是查询单条记录,也可以使用带有`RowMapper`的`query`方法,只需要返回结果集的第一行即可。 #### 快速查询与简洁返回 除了上述方法,`JdbcTemplate`还提供了一系列`queryForXXX`方法,用于快速返回简单的...
使用继承方式可以避免在每个DAO中重复定义`JdbcTemplate`的setter方法。 ### Spring中的事务控制 #### Spring事务控制的基础概念 Spring框架支持两种类型的事务管理:编程式事务管理和声明式事务管理。 - **编程...
现在,我们可以使用`getJdbcTemplate()`方法轻松地编写数据库操作方法。例如,如果我们要查询所有任务,可以这样做: ```java @Override public List<TaskInfo> getAllTasks() { String sql = "SELECT * FROM task...
JdbcTemplate是Spring提供的一个强大且灵活的JDBC工具,它包含了许多预定义的数据库操作方法,如update()、query()等,用于执行更新、查询等SQL语句。在上述示例中,通过调用getJdbcTemplate().update()方法,可以...
jdbcTemplate使用方法实例解析 jdbcTemplate是一个基于Spring JDBC抽象框架的核心类,提供了大量实用的方法来简化数据库操作。在本文中,我们将详细介绍jdbcTemplate的使用方法实例解析,以及其在实际开发中的应用...
通过`getJdbcTemplate()`方法,可以获取到一个`JdbcTemplate`对象,从而方便地进行数据库的增删改查操作。例如,实现对数据库的添加操作: ```java public void addUser(User user) { String sql = "INSERT INTO ...
在这个例子中,我们直接使用`JdbcTemplate`的`execute`方法执行存储过程,无需处理输出参数。 对于有返回值的存储过程,但返回值不是结果集,我们可以创建一个`CallableStatementCreator`来创建`CallableStatement`...
子类可以通过getJdbcTemplate()方法获取并使用这个模板,无需关心连接的创建和关闭。 2. **HibernateDaoSupport**:同样,它包含了内部的SessionFactory,并提供了setSessionFactory()方法供外部注入。子类通过...
在上面的例子中,`MyJdbcDao`类扩展了`JdbcDaoSupport`,因此可以方便地使用`getJdbcTemplate()`方法来执行SQL插入操作。这样,我们避免了直接与JDBC API打交道,提高了代码的可读性和可维护性。 `JdbcDaoSupport`...
以下是对`JdbcTemplate`使用方法的详细说明: ### 1. 获取`JdbcTemplate`对象 #### 方式一:DAO实现类注入 在自定义的DAO实现类中,你可以通过依赖注入的方式获取`JdbcTemplate`。首先,你需要在类中声明一个`...
然而,直接使用JDBC进行数据库操作往往涉及大量重复性代码,如连接数据库、关闭资源、处理结果集等,这既不经济也不高效。为了解决这个问题,程序员们通常会创建一个通用Dao(Data Access Object),来封装这些基础...
Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的。但是 JdbcTemplate还是有很多不足之处或者说是缺点。比如你没法像hibernate那样直接传一个...
public JdbcTemplate getJdbcTemplate() { return new JdbcTemplate(dataSource); // 使用JdbcTemplate简化数据库操作 } } ``` 总的来说,DB Connection Factory是Java中处理数据库连接的最佳实践之一,它提高了...
关于`JdbcDaoSupport`的源码分析,我们可以看到它主要是通过`protected JdbcTemplate getJdbcTemplate()`方法获取`JdbcTemplate`实例。如果用户没有显式设置,`JdbcTemplate`会在初始化时通过`initJdbcTemplate()`...