尽人事而顺天命

关注 esb , soa ,设计模式,快速组件式开发

   :: 首页 :: 联系 :: 聚合  :: 管理
  6 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

2006年4月3日 #

没有想到会碰到这样的一个问题,百思不得其解,贴出来希望哪位也在使用 db2  type2 app jdbc 的兄弟帮忙分析一下: 

使用 ibatis  sql map以及 dao 框架 ,使用 JTA 事务管理,在 websphere 5.1 以及 jboss 4.1 上测试,都出现以下的怪现象: 

使用  sql map 执行 insert  操作的时候, 声明如下的 sql map:

<insert id="ppl_t1.insert" parameterClass="com.surekam.ppl.dao.test.PPLT1">
        asfafdafsdafafsd values (#projId#,#name#);
</insert>
也就是说,一个完全不合法的 sql 语句,但是,在执行的时候, db2 jdbc 居然不报错!!查找到 ibatis 的 sql 执行部分的代码: SqlExecutor 类的: 
 
 1public int executeUpdate(RequestScope request, Connection conn, String sql, Object[] parameters)
 2      throws SQLException {
 3    ErrorContext errorContext = request.getErrorContext();
 4    errorContext.setActivity("executing update");
 5    errorContext.setObjectId(sql);
 6
 7    PreparedStatement ps = null;
 8    int rows = 0;
 9
10    try {
11      errorContext.setMoreInfo("Check the SQL Statement (preparation failed).");
12      ps = conn.prepareStatement(sql);
13
14      errorContext.setMoreInfo("Check the parameters (set parameters failed).");
15      request.getParameterMap().setParameters(request, ps, parameters);
16
17      errorContext.setMoreInfo("Check the statement (update failed).");
18
19      ps.execute();
20      rows = ps.getUpdateCount();
21    }

22    finally {
23      closeStatement(ps);
24    }

25
26    return rows;
27  }


其中并没有什么特别的地方,可是  PrepardStatement 在执行的时候就是不 抛出 SQLException ,而是处理成 SQLWarning ,可以通过 getWarning 取到错误信息. 

而直接自己写一个测试,直接去测试这样一个不合法的 sql ,是会抛出异常的.
db2jdbc 的 bug ?? 还是其它哪里的环境设置?? 

posted @ 2006-04-03 10:11 boss_ch 阅读(437) | 评论 (1)编辑 收藏