【问题标题】:Convert SQL query "SELECT UNIQUE 1..." in Informix-4GL program to Java code将 Informix-4GL 程序中的 SQL 查询“SELECT UNIQUE 1...”转换为 Java 代码
【发布时间】:2012-10-15 19:19:32
【问题描述】:

我想将 Informix-4GL 程序转换为 Java,但我遇到了一些问题。我有一个 Java 代码并成功连接到 Informix,但我遇到了一些问题。

  1. 如何在方法 executeQuery() 中使用“SELECT UNIQUE 1...”,因为 UNIQUE 1 不是 TSQL。
  2. SQLCA.SQLCODE 表示 SQL 查询正确然后返回 0。如何在 Java 中获取 SQLCA.SQLCODE 变量,或者 Java 可以提供相同的功能。

看下面的4GL代码段;这意味着如果 SQL 查询返回任何行,则 SQLCA.SQLCODE 返回 0 并设置 SW_FBCHK = 1

SELECT  UNIQUE  1  FROM  FBFIL:FBRDPF1
       WHERE  COMPID  =  G_DEPTWN
         AND  FPRDAT  =  IO_FONLY.PRTDAT
         AND  INSU01  =  '5'
      IF  SQLCA.SQLCODE  =  0  THEN
          LET  SW_FBCHK  =  1
      ELSE
          LET  SW_FBCHK  =  0
      END IF

【问题讨论】:

    标签: java sql informix 4gl


    【解决方案1】:

    由于您只是测试成功,因此还有其他一些选择。

    SELECT DISTINCT INSU01 ...
    

    似乎是最明显的候选人。如果您的查询中没有像这样的固定谓词,您可能需要考虑测试SELECT COUNT(*) ... 的输出,这意味着稍微改变您的逻辑。

    【讨论】:

      【解决方案2】:

      在 Informix 中,SELECT UNIQUE 是标准 SELECT DISTINCT 的非标准等效项。

      查询正在测试您的表FBFIL:FBRDPF1(即数据库FBFIL中的表FBRDPF1)中是否有满足条件的行:

      WHERE COMPID = g_deptwn
        AND FPRDAT = io_fonly.prtdat
        AND INSU01 = '5'
      

      在这种情况下,可以合理地猜测g_deptwn 是一个全局变量(许多人使用g_ 前缀来表示一个全局变量),而io_fonly.prtdat 可能也是一个变量。因此,您需要将这些值传递给您的 Java SQL 语句。条件的 LHS 上的名称可能是表中的列,而不是更多的 I4GL 变量。您需要确定引用的表在 SQL Server 系统中的位置。

      在 Java 中,您将使用 JDBC,因此您需要执行查询并尝试获取一行(可能提供一个变量来接收值 1)。如果该查询成功,那么您会将SW_FBCHK 的Java 类似物设置为1;否则,您将其设置为 0。不要忘记从查询中释放资源。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多