Tencent / APIJSON

🏆 实时 零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构 🏆 Real-Time coding-free, powerful and secure ORM 🚀 providing APIs and Docs without coding by Backend, and the returned JSON of API can be customized by Frontend(Client) users
http://apijson.cn
Other
17.1k stars 2.14k forks source link

希望使用Oracle数据库时对生成的sql进行改进 #236

Closed gx0803 closed 2 years ago

gx0803 commented 3 years ago

已经实现Oracle数据库的万能接口,不过发现在执行查询的时候,后台生成的接口,字段名是加了双引号的。比如请求json如下: image 这样在后台生成的sql将会是: image 在Oracle中,如果字段名加了引号,则区分大小写,那么该查询就会报错,因为字段是大写的。所以,如果在生成sql时,能生成如下格式的sql,则可以忽略大小写。 image 不知道是否可以通知配置解决该需求,还是要自己重写生成sql的相关逻辑代码

TommyLemon commented 3 years ago

DemoSQLConfig重写 getKey 或 AbstractSQLConfig 直接改 getKey 源码,判断 isOracle() 则直接返回 key,不用 super.getKey(key) // 它会加双引号

gx0803 commented 3 years ago

DemoSQLConfig重写 getKey 或 AbstractSQLConfig 直接改 getKey 源码,判断 isOracle() 则直接返回 key,不用 super.getKey(key) // 它会加双引号

恩谢谢,已经解决,为了方便进行改造,目前是直接引用的apijson的orm与framework的源码,没有使用maven引入,参考jfinal的demo版本,与jboot进行了集成,方便进行其他扩展。想作为oracle版本贡献一个新的demo工程,不知是否可行。

TommyLemon commented 3 years ago

DemoSQLConfig重写 getKey 或 AbstractSQLConfig 直接改 getKey 源码,判断 isOracle() 则直接返回 key,不用 super.getKey(key) // 它会加双引号

恩谢谢,已经解决,为了方便进行改造,目前是直接引用的apijson的orm与framework的源码,没有使用maven引入,参考jfinal的demo版本,与jboot进行了集成,方便进行其他扩展。想作为oracle版本贡献一个新的demo工程,不知是否可行。

可以的,非常感谢。 对 APIJSONORM/apijson-framework 源码的改动也可以发 Pull Request 贡献哦,会把你也加入这个贡献者名单 https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md

zhukj commented 3 years ago

我使用Oracle 数据源,也出现这个问题。重写了getKey,
@Override public String getKey(String key) { return ColumnUtil.compatInputKey(key, getTable(), getMethod()); } 但是项目启动报错,错误信息:Caused by: Error : 904, Position : 74, Sql = SELECT FROM (SELECT FROM "Access" WHERE ( (debug = :1 ) ) ORDER BY id) WHERE ROWNUM BETWEEN 0 AND 99999, OriginalSql = SELECT FROM (SELECT FROM "Access" WHERE ( (debug = ?) ) ORDER BY id) WHERE ROWNUM BETWEEN 0 AND 99999, Error Msg = ORA-00904: "ID": 标识符无效。

是哪里还没配置对吗?

TommyLemon commented 3 years ago

我使用Oracle 数据源,也出现这个问题。重写了getKey, @Override public String getKey(String key) { return ColumnUtil.compatInputKey(key, getTable(), getMethod()); } 但是项目启动报错,错误信息:Caused by: Error : 904, Position : 74, Sql = SELECT FROM (SELECT FROM "Access" WHERE ( (debug = :1 ) ) ORDER BY id) WHERE ROWNUM BETWEEN 0 AND 99999, OriginalSql = SELECT FROM (SELECT FROM "Access" WHERE ( (debug = ?) ) ORDER BY id) WHERE ROWNUM BETWEEN 0 AND 99999, Error Msg = ORA-00904: "ID": 标识符无效。

是哪里还没配置对吗?

用最新版(直接下载代码引用),已经把 ORDER BY id 去掉了