NutzCN Logo
问答 利用 `Record` 更新 Oracle,由于key都为小写导致更新不成功
发布于 2617天前 作者 gythialy 1446 次浏览 复制 上一个帖子 下一个帖子
标签:

使用场景:
从 MySQL 中查询得到一个 List<Record>,然后通过这个 List<Record> 把查询到的记录插入到 Oracle 中,两边的表结构一直,但是由于 Oracle 会自动会把字段名转成大写,所以还是会有一点不太一样

问题:
表中的字段名称有 Oracle 的保留关键字,比如 type,正常的 SQL 语句应该用""逃逸,插入语句类似
```sql
INSERT INTO tb_test1(id,"TYPE") VALUES(140500,1) ;

由于 `Record` 中的字段名都是小写,会生成类似下面的语句

INSERT INTO tb_test1(id, type) VALUES(140500,1) ;
手动把 `type`改成 `"TYPE"`,生成 sql
INSERT INTO tb_test1(id, "type") VALUES(140500,1) ;

```

但是 Oracle 的字段名称都是大写,导致更新不成功

是否有其他办法,不生成 POJO,实现此功能?

11 回复

文档有吧?

NutMap map = new NutMap();
map.put(".table", "t_user");
map.put("name", "wendal");
map.put("age", 19);
dao.insert(map);

用 NutMap 或者 Record 应该都是不可以的吧?
我需要的生成的 INSERT SQL 中的字段名称是大写且带双引号的
我通过反射把 Record 里的 map 和 keys 两个字段的 值修改了,貌似还是不行
"NAME" 字段还是没获取到

 !Nutz SQL Error: 'INSERT INTO tb_connect_station_cfg(station_id,"NAME",vch_placenumber) VALUES(0,'NULL',' ') '
PreparedStatement: 
'INSERT INTO tb_connect_station_cfg(station_id,"NAME",vch_placenumber) VALUES(?,?,?) '
CaseMessage=ORA-01400: 无法将 NULL 插入 ("SCADA"."TB_CONNECT_STATION_CFG"."NAME")

带引号啊???

话说, 报的是不能把null插入NAME

是的,因为字段名称是 Oracle 的保留关键字,需要用双引号逃逸,而且字段不能修改
PS. 主题不能修改,Github 直接拷过来,格式都乱菜了

事实上我在 Record 里面是有赋值的,只是生成 SQL 的时候不知道为什么变成了 NULL

有点蛋疼了

自定义sql吧

话说通过 Record 插入/更新就应该考虑到 数据库本身的关键字逃逸的吧?

嗯嗯,应该是非Pojo方式也需要考虑逃逸。。。 烦请再报issue。。。

嗯,已增加,目前我自己拼 SQL 解决

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