Azaron
19-05-08, 16:05
Hallo Leute,
ich bräuchte mal wieder eure Hilfe.
Diesmal versuch ich mit einem Java-Programm via SQL-Procedure von einem RPG-Programm einen Resultset zurück zu kriegen.
Hier die Code-Snipets:
Java:
Connection cn = instance.getConnection();
if(cn!=null) {
CallableStatement stmt1 = null;
ResultSet rs1 = null;
String sql1 = "";
try {
sql1 = "CALL MACXT.GETGRUNDWARE(?,?,?,?,?,?,?)";
stmt1 = cn.prepareCall(sql1);
stmt1.setString(1, strCompany);
stmt1.setString(2, strSeason);
stmt1.setString(3, strCollection);
stmt1.setString(4, strCut);
stmt1.setString(5, strVariation);
stmt1.setString(6, strArticle);
stmt1.setString(7, strColor);
stmt1.setFetchSize(50);
rs1 = stmt1.executeQuery();
...
SQL:
CREATE PROCEDURE MACXT/GETGRUNDWARE(
IN FINR CHAR ( 3),
IN SAIS CHAR( 2),
IN KOLL CHAR ( 2),
IN FORM CHAR ( 4),
IN VACP CHAR ( 2),
IN ARNR CHAR ( 6),
IN FBNR CHAR ( 4))
RESULT SETS 1 LANGUAGE CL NOT
DETERMINISTIC CONTAINS SQL EXTERNAL NAME MACPGM/JSQL01C PARAMETER
STYLE GENERAL
CLLE:
PGM PARM(&FINR &SAIS &KOLL &FORM &VACP &ARNR &FBNR)
DCL VAR(&FINR) TYPE(*CHAR) LEN(3)
DCL VAR(&SAIS) TYPE(*CHAR) LEN(2)
DCL VAR(&KOLL) TYPE(*CHAR) LEN(2)
DCL VAR(&FORM) TYPE(*CHAR) LEN(4)
DCL VAR(&VACP) TYPE(*CHAR) LEN(2)
DCL VAR(&ARNR) TYPE(*CHAR) LEN(6)
DCL VAR(&FBNR) TYPE(*CHAR) LEN(4)
CHKOBJ OBJ(QTEMP/JSQL01PF) OBJTYPE(*FILE)
MONMSG MSGID(CPF0000) EXEC(DO)
CRTDUPOBJ OBJ(JSQL01PF) FROMLIB(MACDTA) OBJTYPE(*FILE) +
TOLIB(QTEMP) DATA(*NO)
MONMSG MSGID(CPF0000)
ENDDO
CLRPFM FILE(QTEMP/JSQL01PF)
MONMSG MSGID(CPF0000)
OVRDBF FILE(JSQL01PF) TOFILE(QTEMP/JSQL01PF)
MONMSG MSGID(CPF0000)
CALL PGM(JSQL01R) PARM(&FINR &SAIS &KOLL &FORM +
&VACP &ARNR &FBNR)
MONMSG MSGID(CPF0000)
ENDPGM
RPGLE:
....
C/EXEC SQL
C+ DECLARE CUR1 SCROLL CURSOR WITH RETURN TO CLIENT FOR
C+ SELECT * FROM QTEMP/JSQL01PF
C+ FOR FETCH ONLY
C/END-EXEC
C/EXEC SQL
C+ OPEN CUR1
C/END-EXEC
C/EXEC SQL
C+ SET RESULT SETS FOR RETURN TO CLIENT
C+ CURSOR CUR1
C/END-EXEC
Hinweis:
Ich fülle in dem RPGLE die QTEMP/JSQL01PF mit Daten aus ein paar Dateien.
Wenn ich das jetzt ausführe krieg ich folgende Fehler:
java.sql.SQLException: Cursor state not valid.
Im Joblog des Jobs sagt er mir dazu das:
Nachrichten-ID . . . . : SQL0579
Lesen von SQL-Daten nicht zulässig.
Nachrichten-ID . . . . : SQL0501
Cursor CUR1 nicht geöffnet.
Ich such da jetzt schon seit Stunden nach der Ursache... :(
Wäre echt nett wenn ihr einen Hinweis für mich hättet.
Danke
ich bräuchte mal wieder eure Hilfe.
Diesmal versuch ich mit einem Java-Programm via SQL-Procedure von einem RPG-Programm einen Resultset zurück zu kriegen.
Hier die Code-Snipets:
Java:
Connection cn = instance.getConnection();
if(cn!=null) {
CallableStatement stmt1 = null;
ResultSet rs1 = null;
String sql1 = "";
try {
sql1 = "CALL MACXT.GETGRUNDWARE(?,?,?,?,?,?,?)";
stmt1 = cn.prepareCall(sql1);
stmt1.setString(1, strCompany);
stmt1.setString(2, strSeason);
stmt1.setString(3, strCollection);
stmt1.setString(4, strCut);
stmt1.setString(5, strVariation);
stmt1.setString(6, strArticle);
stmt1.setString(7, strColor);
stmt1.setFetchSize(50);
rs1 = stmt1.executeQuery();
...
SQL:
CREATE PROCEDURE MACXT/GETGRUNDWARE(
IN FINR CHAR ( 3),
IN SAIS CHAR( 2),
IN KOLL CHAR ( 2),
IN FORM CHAR ( 4),
IN VACP CHAR ( 2),
IN ARNR CHAR ( 6),
IN FBNR CHAR ( 4))
RESULT SETS 1 LANGUAGE CL NOT
DETERMINISTIC CONTAINS SQL EXTERNAL NAME MACPGM/JSQL01C PARAMETER
STYLE GENERAL
CLLE:
PGM PARM(&FINR &SAIS &KOLL &FORM &VACP &ARNR &FBNR)
DCL VAR(&FINR) TYPE(*CHAR) LEN(3)
DCL VAR(&SAIS) TYPE(*CHAR) LEN(2)
DCL VAR(&KOLL) TYPE(*CHAR) LEN(2)
DCL VAR(&FORM) TYPE(*CHAR) LEN(4)
DCL VAR(&VACP) TYPE(*CHAR) LEN(2)
DCL VAR(&ARNR) TYPE(*CHAR) LEN(6)
DCL VAR(&FBNR) TYPE(*CHAR) LEN(4)
CHKOBJ OBJ(QTEMP/JSQL01PF) OBJTYPE(*FILE)
MONMSG MSGID(CPF0000) EXEC(DO)
CRTDUPOBJ OBJ(JSQL01PF) FROMLIB(MACDTA) OBJTYPE(*FILE) +
TOLIB(QTEMP) DATA(*NO)
MONMSG MSGID(CPF0000)
ENDDO
CLRPFM FILE(QTEMP/JSQL01PF)
MONMSG MSGID(CPF0000)
OVRDBF FILE(JSQL01PF) TOFILE(QTEMP/JSQL01PF)
MONMSG MSGID(CPF0000)
CALL PGM(JSQL01R) PARM(&FINR &SAIS &KOLL &FORM +
&VACP &ARNR &FBNR)
MONMSG MSGID(CPF0000)
ENDPGM
RPGLE:
....
C/EXEC SQL
C+ DECLARE CUR1 SCROLL CURSOR WITH RETURN TO CLIENT FOR
C+ SELECT * FROM QTEMP/JSQL01PF
C+ FOR FETCH ONLY
C/END-EXEC
C/EXEC SQL
C+ OPEN CUR1
C/END-EXEC
C/EXEC SQL
C+ SET RESULT SETS FOR RETURN TO CLIENT
C+ CURSOR CUR1
C/END-EXEC
Hinweis:
Ich fülle in dem RPGLE die QTEMP/JSQL01PF mit Daten aus ein paar Dateien.
Wenn ich das jetzt ausführe krieg ich folgende Fehler:
java.sql.SQLException: Cursor state not valid.
Im Joblog des Jobs sagt er mir dazu das:
Nachrichten-ID . . . . : SQL0579
Lesen von SQL-Daten nicht zulässig.
Nachrichten-ID . . . . : SQL0501
Cursor CUR1 nicht geöffnet.
Ich such da jetzt schon seit Stunden nach der Ursache... :(
Wäre echt nett wenn ihr einen Hinweis für mich hättet.
Danke