Le web de Dominique Guebey – IBM AS/400 iSeries

Page : http://www.dg77.net/tekno/as400/as400clsql.htm


   D o m i n i q u e   G u e b e y    J u n g l e      IBM AS/400 iSeries

CL AS400 utilisant SQL et Java

Commande pour lancer un traîtement SQL

                      Lance cde SQL (JDBC)        (SQLJDBC)

 Indiquez vos choix, puis appuyez sur ENTREE.

 Commande SQL . . . . . . . . . .   ____________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
____________________________________________________________________ ...









                                                                            Fin 
 F3=Exit   F4=Invite   F5=Réafficher   F12=Annuler   F13=Mode d'emploi invite   
 F24=Autres touches

Prompt de lancement

0001.00 CMD PROMPT('Lance cde SQL (JDBC)       ')                         
0002.00                                                                   
0003.00              PARM       KWD(CMDSQL) TYPE(*CHAR) LEN(1024) MIN(1) +
0004.00                           PROMPT('Commande SQL')                  
0005.00                                                                   
0006.00 PARM DTA *CNAME 10 CONSTANT(DGBIBLIO) DTAARA(*YES)                
0007.00 PARM WKSTN *PNAME 10 CONSTANT('          ') DTAARA(*YES)          

Création de la commande

0164.00 /** LANCE COMMANDE SQL                                                 
0165.00 CRTCMD &LIB/SQLJDBC PGM(&LIB/SQLCL    ) SRCFILE(&LIB/QCMDSRC) +        
0166.00                SRCMBR(SQLCMD) TEXT('LANCE COMMADE SQL-JDBC           ')

Le CL reçoit la commande SQL en premier paramètre

0001.00 /* LANCE SQL EN MODE JDBC                               */             
0002.00 /* Parametres :                                                      */
0003.00 /* - COMMANDE SQL EN MODE JDBC                                       */
0004.00                                                                        
0005.00 PGM PARM(&CMDSQL &DTA &WKSTN)                                          
0006.00 DCL &CMDSQL     *CHAR 1024                                             
0007.00 DCL &TYPE *CHAR 1                                                      
0008.00 DCL &DTA *CHAR 10                                                      
0009.00 DCL &WKSTN  *CHAR 10                                                   
0010.00 DCL &LIB *CHAR 10                                                      
0011.00                                                                        
0012.00 /* INTERACTIF SEULEMENT POUR TESTS */                                  
0013.00 /* GOTO OK                         */
0014.00                                                                        
0015.00 /* CE CL SE LANCE LUI-MEME EN BATCH                     */             
0016.00     /* TEST SI BATCH                                    */             
0017.00          RTVJOBA    TYPE(&TYPE)                                       
0018.00     /* SI OUI : TRAITEMENT                              */            
0019.00          IF         COND(&TYPE *EQ '0') THEN(GOTO CMDLBL(OK))         
0020.00     /* SI NON, ENVOI EN BATCH                           */            
0021.00              RTVDTAARA  DTAARA(&DTA (1 10)) RTNVAR(&LIB)              
0022.00              RTVJOBA    JOB(&WKSTN)                                   
0023.00              SBMJOB     CMD(CALL PGM(&LIB/SQLCL) PARM(&CMDSQL &DTA +  
0024.00                           &WKSTN)) JOB(JDBC_SQL)                      
0025.00              RETURN                                                   
0026.00 /* -------------------------------------------------- */              
0027.00 OK:                                                                   
0028.00                                                                       
0029.00             RTVDTAARA  DTAARA(&DTA (1 10)) RTNVAR(&LIB)               
0030.00                                                                       
0031.00              CALL       PGM(&LIB/SBRSQLCL) PARM(&CMDSQL &LIB &WKSTN)  
0032.00                                                                       
0033.00 IF COND(&TYPE *EQ '0') THEN(DO)                                       
0034.00 CALL &LIB/SBRMSGCL PARM('SQL       ' &LIB &WKSTN)    
0035.00 MONMSG CPF0000                                       
0036.00    ENDDO                                             
0037.00                                                      
0038.00 ENDPGM                                               

Routine SBRSQLCL

0001.00 /* LANCE UNE COMMANDE SQL VIA JDBC                                   */
0002.00 /*                                                                   */
0003.00 /* Parametres :                                                      */
0004.00 /* - COMMANDE SQL EN MODE JDBC                                       */
0005.00 /* - BIBLIOTHEQUE                                                    */
0006.00 /* - WKSTN                                                           */
0007.00                                                                        
0008.00 PGM PARM(&CMDSQL &LIB &WKSTN)                                          
0009.00 DCL &CMDSQL     *CHAR 1024                                             
0010.00 DCL &LIB        *CHAR 10                                               
0011.00 DCL &CLASSES    *CHAR 256                                              
0012.00 DCL &SYSTEM     *CHAR 10                                               
0013.00 DCL &WKSTN      *CHAR 10                                               
0014.00                                                                        
0015.00 ADDLIBLE GUEBEY *LAST                                                  
0016.00 MONMSG CPF0000                                                         
0017.00                                                                        
0018.00 RTVNETA SYSNAME(&SYSTEM)                                               
0019.00                                                                        
0020.00 /* UTILISATION D'UNE CLASSE JAVA */                                    
0021.00 /* ----------------------------- */                                    
0022.00 RTVDTAARA &LIB/DGCLASSES &CLASSES                                      
0023.00 MONMSG CPF0000 EXEC(DO)                                                
0024.00        CHGVAR &CLASSES '/home/guebey/java'                             
0025.00        ENDDO                                                           
0026.00 CHGCURDIR &CLASSES                                                     
0027.00 RUNJVA JDBCGeneric PARM(&SYSTEM &CMDSQL) +                             
0028.00        CLASSPATH('.:/QIBM/PRODDATA/HTTP/PUBLIC/JT400/LIB/JT400.JAR') + 
0029.00        OUTPUT(*PRINT)                                                  
0030.00 MONMSG JVA0000                                                         
0031.00                                                                        
0032.00 FIN: ENDPGM

La classe Java

/**
Traitement par SQL/Jdbc d'un fichier AS400/iSeries, 

@author Dominique Guebey d.guebey@abxlogistics.fr
@param 
        nom de l'as400, 
        commande SQL (entre GUILLEMETS)
@version 11 juin 2004
*/

// Utilisation de com.ibm.as400.access de jt400.jar
//      cf dans /QIBM/ProdData/HTTP/Public/jt400/lib/
// cf http://codenewbie.com/tutorials/1940.html

// Modifications :
// TODO :

import java.sql.*;
import com.ibm.as400.access.*;

public class JDBCGeneric extends Object 
{

public static void main (String[] parameters)
{
// Verifie les parametres :
if (parameters.length < 2) { return; }
if (parameters.length > 2) { return; }

String system = parameters[0];
String sql = parameters[1];

Connection connection = null;

try {

// Definir et ouvrir le fichier en sortie et obtenir la connexion...
AS400 as400 = new AS400(system);

// Load the IBM Toolbox for Java JDBC driver.
DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
// Get a connection to the database. Since we do not
// provide a user id or password, a prompt will appear.
connection = DriverManager.getConnection ("jdbc:as400://" + system);
//DatabaseMetaData dmd = connection.getMetaData ();

// Query sur le fichier
Statement select = connection.createStatement ();
ResultSet rs = select.executeQuery (sql);
// java.sql.Statement stmt = connection.createStatement();
//ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {
   System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3)+" "+rs.getString(4)+" "+rs.getString(5)+" "+rs.getString(6)+" "+rs.getString(7)+" "+rs.getString(8)+" "+ rs.getString(9)+" ");
   }
}

catch (Exception e) {
// System.out.println ();
// System.out.println ("ERROR: " + e.getMessage());
}
finally {
// Clean up.
try {
if (connection != null)
connection.close ();

}

catch (SQLException e) {
// Ignore.
}
}
System.exit (0);
}

}