我想将Informix-4GL程序转换为Java,我有一些问题。我有一个Java代码,并与Informix连接成功,但是我遇到了一些问题。
- 我如何在方法executequery()中使用"选择唯一1 ...",因为唯一1不是tsql。
- 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(*) ...
的输出,这意味着稍微更改逻辑。