Java PreparedStatement 跨数据库转换

Java PreparedStatement Cross-DB with casting

我有一个 PreparedStatement 旨在 运行 在 ORACLE 和 MYSQL 上。 但我不知道如何处理 CAST(NULL AS ...)

在 Oracle 上以下工作(但不在 Mysql):

SELECT TIMB_INS,
CAST(NULL AS TIMESTAMP) AS TIMB_CLO
FROM TOPS

在 Mysql 上以下工作(但不在 Oracle 上):

SELECT TIMB_INS,
CAST(NULL AS DATETIME) AS TIMB_CLO
FROM TOPS

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

有没有办法让它对两者都有效? IE。我可以通过某种方式使其独立于数据库吗?

谢谢 马可

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

  • 使用 DAO 模式。 IE。为每个 SQL 风格提供一个包含 SQL-s.
  • 的 java 文件
  • 使用像 Hibernate or JPA 这样的 ORM。这将解决这种差异。
  • 作为快速技巧,您可以手动编辑 SQL,如下面的代码片段所示。但是你必须以某种方式确定底层数据库是 Oracle 还是 MySQL

    String SQL_PATTERN = "... CAST(NULL AS %s) AS TIMB_CLO ...";

    String SQL = String.format(SQL_PATTERN, isOracle ? "TIMESTAMP" : "DATETIME");