Spring jdbcTemplate.query()查询失败

on_my_way20xx 2010-02-04 02:45:27
	public Production getById( String id) throws Exception {
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(definition);
Production prod = new Production();
String query = "select * from t_productions where prod_id=?";
try{
int prod_id = Integer.parseInt(id);
prod = (Production)jdbcTemplate.queryForObject(query,new Object[]{prod_id},
new int[]{java.sql.Types.INTEGER},new ProdRowMapper());
}catch(Exception ex){
transactionManager.rollback(status);
throw ex;

}
return prod;
}

//为Query方法准备的内部类
class ProdRowMapper implements org.springframework.jdbc.core.RowMapper{

public Object mapRow(ResultSet rst, int rowNum) throws SQLException {
Production prod = new Production();
while(rst.next()) {//次数rst.next()返回false!
prod.setProd_id(rst.getString("prod_id"));
prod.setProd_Materials(rst.getString("prod_Materials"));
prod.setProd_meas_status(rst.getString("prod_meas_status"));
prod.setProd_model(rst.getString("prod_model"));
prod.setProd_name(rst.getString("prod_name"));
prod.setProd_update_DT(rst.getString("prod_update_DT"));
prod.setProd_update_user(rst.getString("prod_update_user"));
prod.setS_id(rst.getString("s_id"));
}
return prod;
}

}




如上所示,是一个Dao类的一个方法,以其一个内部类,可是查询的结果仅仅是一个空的 Production对象,为何?
...全文
1305 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Z-Davin 2011-08-29
  • 打赏
  • 举报
回复
new Object[] {id},这个是参数啊。你怎么传的啊
hnxxhc 2010-02-20
  • 打赏
  • 举报
回复
是Spring的一个函数啊
public Object queryForObject(String sql,
Object[] args,
int[] argTypes,
Class requiredType)
throws DataAccessException
crazylaa 2010-02-05
  • 打赏
  • 举报
回复
new Object[]{prod_id},
->
new Object[]{id},
西瓜 2010-02-05
  • 打赏
  • 举报
回复
jdbcTemplate.queryForObject
这个方法还真没用过。。。
一般都用这几个
jdbcTemplate.queryForList
jdbcTemplate.queryForMap
jdbcTemplate.queryForLong
on_my_way20xx 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 warison2008 的回复:]
new Object[] {id},这个是参数啊。你怎么传的啊
[/Quote]

prod = (Production)jdbcTemplate.queryForObject(query,new Object[]{prod_id},
new int[]{java.sql.Types.INTEGER},new ProdRowMapper());
如醒目字体所示,我就是这样传的,不过兄弟你这个方法少了一个参数而已
烟雨鹏城 2010-02-04
  • 打赏
  • 举报
回复
new Object[] {id},这个是参数啊。你怎么传的啊
on_my_way20xx 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 warison2008 的回复:]
final User user = new User();     
   
jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",   
   
new Object[] {id},   
   
new RowCallbackHandler() {   
   
public void processRow(ResultSet rs) throws SQLException {   
   
user.setId(rs.getString("user_id")); 
   
user.setName(rs.getString("name")); 
   
user.setSex(rs.getString("sex").charAt(0));   
   
user.setAge(rs.getInt("age"));   
   

   
}); 
[/Quote]

这个我也试过,查不出来东西,我感觉是参数没传对的样子.
烟雨鹏城 2010-02-04
  • 打赏
  • 举报
回复
final User user = new User();

jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",

new Object[] {id},

new RowCallbackHandler() {

public void processRow(ResultSet rs) throws SQLException {

user.setId(rs.getString("user_id"));

user.setName(rs.getString("name"));

user.setSex(rs.getString("sex").charAt(0));

user.setAge(rs.getInt("age"));

}

});
烟雨鹏城 2010-02-04
  • 打赏
  • 举报
回复
Production name = (String) jdbcTemplate.queryForObject("select * from t_productions where prod_id=?", new Object[] {id}, Production.class);
on_my_way20xx 2010-02-04
  • 打赏
  • 举报
回复
jdbcTemplate 怎么 直接调用PreparedStatement
dickli1986 2010-02-04
  • 打赏
  • 举报
回复
那就不要用模板了,直接用PrepareStatement就好了
on_my_way20xx 2010-02-04
  • 打赏
  • 举报
回复
求高手指导....
on_my_way20xx 2010-02-04
  • 打赏
  • 举报
回复
其实我之前都是在BO层拼接好SQL语句直接执行的,但是考虑到 "or 1=1"这样的Sql语句注入的安全问题,所以想用PreparedStatement set进去的
dickli1986 2010-02-04
  • 打赏
  • 举报
回复
这个模板方法支持PrepareStatement中的?做为参数吗?我没用过模板不知道啊,直接拼sql再试试看
colin_pxx 2010-02-04
  • 打赏
  • 举报
回复
如果是查询的话 你那些参数不应该是new出来的吧 要么为null要么就是你set进去的值
xchen1986 2010-02-04
  • 打赏
  • 举报
回复
list = this.jdbcTemplate.queryForList(sql); 我的是在sql语句直接拼的字符串 没有在后面加new object【】对象 加了话 是查不到条件要找的对象
不知道为什么 所以 我想
应该是new Object[]{prod_id},
new int[]{java.sql.Types.INTEGER},new ProdRowMapper()这里的问题 你试试 把这个对象用拼字符串的形式看看 个人愚见
on_my_way20xx 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 haojian11 的回复:]
prod = (Production)jdbcTemplate.queryForObject(query,new Object[]{prod_id},
new int[]{java.sql.Types.INTEGER},new ProdRowMapper());

这段代码里面的queryForObject方法里面的参数都是什么啊?是写错了,还是java新出的写法啊。

[/Quote]

是Spring的一个函数啊
public Object queryForObject(String sql,
Object[] args,
int[] argTypes,
Class requiredType)
throws DataAccessException
haojian11 2010-02-04
  • 打赏
  • 举报
回复
prod = (Production)jdbcTemplate.queryForObject(query,new Object[]{prod_id},
new int[]{java.sql.Types.INTEGER},new ProdRowMapper());

这段代码里面的queryForObject方法里面的参数都是什么啊?是写错了,还是java新出的写法啊。

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧