NutzCN Logo
问答 sql语句执行update不生效
发布于 2460天前 作者 qq_a258695c 5924 次浏览 复制 上一个帖子 下一个帖子
标签:

Oracel数据库。用第一种方式(注释部分)执行,数据库不生效;改成下面的代码,执行就生效。
说明:insert两种方式都生效。
for (RainQC_S_R record : update) {
// Sql sql_update = Sqls.create("UPDATE QC_S_R SET F13019_R = @F13019_R, Q13019_R = @Q13019_R WHERE C_RGWSEID = @C_RGWSEID");
// sql_update.setParam("F13019_R", record.getF13019_R());
// sql_update.setParam("Q13019_R", record.getQ13019_R());
// sql_update.setParam("C_RGWSEID", record.getD_RECORD_ID());

       Sql sql_update = Sqls.create("UPDATE QC_S_R SET F13019_R = '"+record.getF13019_R()+"', Q13019_R = '"+record.getQ13019_R()+"' WHERE C_RGWSEID = '"+record.getD_RECORD_ID()+"'");      
       dao.execute(sql_update);
    }

是nutz的bug吗?我的nutz版本是1.b.53

21 回复

贴输出的日志

2017-07-26 14:37:38 [main] DEBUG org.nutz.dao.impl.sql.run.NutDaoExecutor - UPDATE QC_S_R SET F13019_R = '100101', Q13019_R = '0' WHERE C_RGWSEID = '1738967967'
2017-07-26 14:37:45 [main] DEBUG org.nutz.dao.impl.sql.run.NutDaoExecutor - UPDATE QC_S_R SET F13019_R = '100101', Q13019_R = '0' WHERE C_RGWSEID = '1738970679'
2017-07-26 14:37:48 [main] DEBUG org.nutz.dao.impl.sql.run.NutDaoExecutor - UPDATE QC_S_R SET F13019_R = '100101', Q13019_R = '0' WHERE C_RGWSEID = '1738970665'

日志显示执行,但是数据库没生效。

第二种方式,就生效了。也是输出同样的日志。

C_RGWSEID 在数据库里面的值没有精确匹配上吧

参数形式的日志也贴一下

参数形式:java里定义的是string, 数据库定义的是char(20)。日志输出的sql,我手工到plsql里执行有效。

参数形式的日志?nutz输出的吗?

是的, nutz的日志

执行下面语句的日志:

Sql sql_update = Sqls.create("UPDATE QC_S_R SET F13019_R = @F13019_R, Q13019_R = @Q13019_R WHERE C_RGWSEID = @C_RGWSEID");

好的,我看一下。

这条执行完,没输出?

。。。 就是对比两种写法的输出啊

没有不一样的输出,都是输出下面的这些sql。

2017-07-26 14:37:38 [main] DEBUG org.nutz.dao.impl.sql.run.NutDaoExecutor - UPDATE QC_S_R SET F13019_R = '100101', Q13019_R = '0' WHERE C_RGWSEID = '1738967967'
2017-07-26 14:37:45 [main] DEBUG org.nutz.dao.impl.sql.run.NutDaoExecutor - UPDATE QC_S_R SET F13019_R = '100101', Q13019_R = '0' WHERE C_RGWSEID = '1738970679'
2017-07-26 14:37:48 [main] DEBUG org.nutz.dao.impl.sql.run.NutDaoExecutor - UPDATE QC_S_R SET F13019_R = '100101', Q13019_R = '0' WHERE C_RGWSEID = '1738970665'

执行下面的语句,nutz没日志输出呢。是我配置不对吗?

Sql sql_update = Sqls.create("UPDATE QC_S_R SET F13019_R = @F13019_R, Q13019_R = @Q13019_R WHERE C_RGWSEID = @C_RGWSEID");
Sql sql_update = Sqls.create("UPDATE QC_S_R SET F13019_R = @F13019_R, Q13019_R = @Q13019_R WHERE C_RGWSEID = @C_RGWSEID");
    for (RainQC_S_R record : update) {
        sql_update.setParam("F13019_R", record.getF13019_R());
        sql_update.setParam("Q13019_R", record.getQ13019_R());
        sql_update.setParam("C_RGWSEID", record.getD_RECORD_ID());
        sql_update.addBatch();
    }
dao.execute(sql_update);

话说, 如果上述语句没有更新成功,使用相同的C_RGWSEID值应该是查不出数据的

Record re = dao.fetch("QC_S_R", Cnd.where("C_RGWSEID", "=", record.getD_RECORD_ID()));
//那么re也应该是null; 可以验证一下

我主要是为了批量执行,用的就是您贴出来的那部分代码,但是就是不生效。日志输出的update语句,我在plsql里手动执行,有效。

我验证一下fetch是否返回null

输出日志的sql,在plsql里执行有记录。

2017-07-26 15:15:33 [main] DEBUG org.nutz.dao.impl.sql.run.NutDaoExecutor - SELECT * FROM (SELECT T.*, ROWNUM RN FROM ( SELECT * FROM QC_S_R  WHERE C_RGWSEID=?) T WHERE ROWNUM <= 1) WHERE RN > 0 
    |          1 |
    |------------|
    | 1738954436 |
  For example:> "SELECT * FROM (SELECT T.*, ROWNUM RN FROM ( SELECT * FROM QC_S_R  WHERE C_RGWSEID='1738954436') T WHERE ROWNUM <= 1) WHERE RN > 0 "

所以是数据的问题,数据库里面的值, 并没有精确匹配上.

Sql sql = Sqls.fetchRecord("SELECT * FROM QC_S_R  WHERE C_RGWSEID='1738954436'");
dao.execute(sql);
Record re = sql.getObject(Record.class);
System.out.println("["+re.get("C_RGWSEID") + "]");
System.out.println("1738954436".equals(re.get("C_RGWSEID")));

数据定义了char,应该改成varchar。谢谢兽总。

添加回复
请先登陆
回到顶部