将 Informix-4GL 程序中的 SQL 查询"SELECT UNIQUE 1..."转换为 Java 代码



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

  1. 我如何在方法executequery()中使用"选择唯一1 ...",因为唯一1不是tsql。
  2. sqlca.sqlcode表示正确的sql查询,然后返回0。如何在java或java中获得sqlca.sqlcode变量可以提供相同的功能。

查看下面的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

在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。不要忘记从查询中释放资源。

由于您仅测试成功,因此还有其他一些选项。

SELECT DISTINCT INSU01 ...

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

最新更新