gpt4 book ai didi

Java PreparedStatement Cross-DB with casting

转载 作者:搜寻专家 更新时间:2023-10-30 23:38:42 24 4
gpt4 key购买 nike

我有一个准备在 ORACLE 和 MYSQL 上运行的 PreparedStatement。但我不知道如何处理 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”在两种情况下都返回目标数据库类型的正确数据类型,即 TIMESTAMP 用于 Oracle,DATETIME 用于 MySql。)

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

谢谢马可

最佳答案

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

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

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

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

关于Java PreparedStatement Cross-DB with casting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com