4

我想将 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
4

2 回答 2

2

在 Informix 中,SELECT UNIQUE非标准等效于标准SELECT DISTINCT

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

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)。如果该查询成功,那么您将把 Java 类似物设置SW_FBCHK为 1;否则,您将其设置为 0。不要忘记从查询中释放资源。

于 2012-10-26T03:36:28.917 回答
1

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

SELECT DISTINCT INSU01 ...

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

于 2012-10-25T20:34:48.727 回答