Java PreparedStatement带转换的交叉数据库
我有一个PreparedStatement,打算在ORACLE和MYSQL上运行。 但我不知道如何处理强制转换(NULL AS…) 在Oracle上,以下功能可用(但在Mysql上不可用): 在Mysql上,以下功能有效(但在Oracle上无效): (请注意,选择的第一列“TIMB_INS”在这两种情况下都返回目标数据库类型的正确数据类型,即Oracle的TIMESTAMP和MySql的DATETIME。) 有没有一种方法可以让它同时适用于两者? 也就是说,我能以某种方式使它独立吗 谢谢Java PreparedStatement带转换的交叉数据库,java,mysql,database,oracle,prepared-statement,Java,Mysql,Database,Oracle,Prepared Statement,我有一个PreparedStatement,打算在ORACLE和MYSQL上运行。 但我不知道如何处理强制转换(NULL AS…) 在Oracle上,以下功能可用(但在Mysql上不可用): 在Mysql上,以下功能有效(但在Oracle上无效): (请注意,选择的第一列“TIMB_INS”在这两种情况下都返回目标数据库类型的正确数据类型,即Oracle的TIMESTAMP和MySql的DATETIME。) 有没有一种方法可以让它同时适用于两者? 也就是说,我能以某种方式使它独立吗 谢谢 Mar
Marco根据标记,我可以看到您是从一些java代码中调用此语句的。有几种方法可以做到这一点:
- 使用该模式。也就是说,为每个SQL风格提供一个包含SQL-s的java文件
- 使用类似于或的ORM。这将解决这种差异
- 作为一种快速破解,您可以手动编辑SQL,如下面的代码段所示。但是,您必须以某种方式确定底层数据库是Oracle还是MySQL 字符串SQL_PATTERN=“…强制转换(NULL为%s)为TIMB_CLO…” stringsql=String.format(SQL_模式,isOracle?“时间戳”:“DATETIME”)
SELECT TIMB_INS,
CAST(NULL AS TIMESTAMP) AS TIMB_CLO
FROM TOPS
SELECT TIMB_INS,
CAST(NULL AS DATETIME) AS TIMB_CLO
FROM TOPS