Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PreparedStatement带转换的交叉数据库_Java_Mysql_Database_Oracle_Prepared Statement - Fatal编程技术网

Java PreparedStatement带转换的交叉数据库

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

我有一个PreparedStatement,打算在ORACLE和MYSQL上运行。 但我不知道如何处理强制转换(NULL AS…)

在Oracle上,以下功能可用(但在Mysql上不可用):

在Mysql上,以下功能有效(但在Oracle上无效):

(请注意,选择的第一列“TIMB_INS”在这两种情况下都返回目标数据库类型的正确数据类型,即Oracle的TIMESTAMP和MySql的DATETIME。)

有没有一种方法可以让它同时适用于两者? 也就是说,我能以某种方式使它独立吗

谢谢
Marco

根据标记,我可以看到您是从一些java代码中调用此语句的。有几种方法可以做到这一点:

  • 使用该模式。也就是说,为每个SQL风格提供一个包含SQL-s的java文件
  • 使用类似于或的ORM。这将解决这种差异
  • 作为一种快速破解,您可以手动编辑SQL,如下面的代码段所示。但是,您必须以某种方式确定底层数据库是Oracle还是MySQL

    字符串SQL_PATTERN=“…强制转换(NULL为%s)为TIMB_CLO…”

    stringsql=String.format(SQL_模式,isOracle?“时间戳”:“DATETIME”)


是的,这是来自独立java应用程序的调用。我认为您的第三个解决方案可能会达到这个目的,尽管我希望仅从sql解决它(非常出色?)。但也许这根本不可能。(感谢您的快速回复!)也许还有SQL解决方案。我只是没有工具来为您进行实验。另一个不太出色的解决方案是在该表中,在两个DBs上添加所需类型的未使用(null)列并选择它。然而,为了简单起见,我们选择了您的第三种解决方案。我们从“connection.getMetaData().getDatabaseProductName()”中查看了数据库名称。谢谢!;-)拜拜。NB我会给你的解决方案+1,但我仍然不能,因为作为一个新手,我的声誉很低,你仍然可以接受它,在上下箭头下方打勾:)
SELECT TIMB_INS,
CAST(NULL AS TIMESTAMP) AS TIMB_CLO
FROM TOPS
SELECT TIMB_INS,
CAST(NULL AS DATETIME) AS TIMB_CLO
FROM TOPS