[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    DAS ist eben der Unterschied !
    Normalerweise dürfte NUR DIE 1. Anweisung zu sehen sein (das ist so, wenn ich z.B. vom PC per ODBC mit VB/VBA zugreife).
    Es sieht also so aus, dass Java den SQL eben immer neu zusammenbaut und daher Prepared AUF DER AS/400 nicht läuft. Scheinbar gilt der Prepared nur intern für Java.

    Suche da mal nach Möglichkeiten !
    Kannst du ggf. einstellen, dass ein SQLPKG (SQL-Paket) verwendet werden soll ?

    PS:
    ExecuteBatch ist eine reine Java/DAO/ADO-Funktion und hat mit SQL rein gar nichts zu tun.
    Der Speicherüberlauf passiert ja auf dem PC und nicht auf der AS !
    Das Sammeln der SQL's wird rein durch die SQL-Runtime durchgeführt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  2. #2
    Registriert seit
    Sep 2002
    Beiträge
    47
    Hi!

    Hab Dein Beispiel mal etwas angepasst und bei uns laufen lassen.
    Bei uns dauert das zw. 3-5 Sekunden.

    Ich habs hier getestet mit JTOpen 4.8 und V5R3 auf ner
    520. Sicher das alle PTF's unter OS/400 installiert sind und die akt. JDBC Treiber benutzt werden?


    Zeiten:

    Starte: Mon Sep 05 19:20:15 CEST 2005
    JDBC init: Mon Sep 05 19:20:16 CEST 2005
    Create Table: Mon Sep 05 19:20:16 CEST 2005
    Insert 10.000: Mon Sep 05 19:20:19 CEST 2005
    Close: Mon Sep 05 19:20:19 CEST 2005


    Dein Beispiel:

    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.Statement;
    import java.util.Date;

    /**
    * @author xxx
    *
    */
    public class Test {

    /**
    *
    */
    public Test() {
    super();
    // TODO Auto-generated constructor stub
    }

    /**
    * @param args
    */
    public static void main(String args) {

    long start = System.currentTimeMillis();

    try{
    DriverManager.setLogWriter( new PrintWriter(System.out) );
    Class.forName( "com.ibm.as400.access.AS400JDBCDriver" );
    Connection con = DriverManager.getConnection("jdbc:as400://xxx.xxx.xxx.xxx/qsys.lib/xxxx.lib/","xx", "xx");
    Statement stmt = con.createStatement();

    long init = System.currentTimeMillis();


    try{
    stmt.execute(" CREATE TABLE xxxx.SQLTEST (FLD1 CHAR (10 ) NOT NULL WITH DEFAULT, FLD2 CHAR (10 ) NOT NULL WITH DEFAULT) ");
    }catch(Exception e){
    System.err.println("Fehler: "+e.getMessage());
    }

    long create = System.currentTimeMillis();

    PreparedStatement ps = con.prepareStatement("INSERT INTO nslib.sqltest VALUES(?, ?)");
    for (int i = 0; i<10000;i++) {
    ps.setString(1, "FLDA");
    ps.setString(2, "FLDB");
    ps.addBatch();
    }
    ps.setString(1, "FLDA");
    ps.setString(2, "FLDB");
    ps.executeBatch();

    long insert = System.currentTimeMillis();

    stmt.close();
    con.close();

    long close = System.currentTimeMillis();

    System.out.println("Starte: " + new Date(start));
    System.out.println("JDBC init: " + new Date(init));
    System.out.println("Create Table: " + new Date(create));
    System.out.println("Insert 10.000: " + new Date(insert));
    System.out.println("Close: " + new Date(close));

    }
    catch(Exception e){
    e.printStackTrace();
    System.err.println("Fehler: " + e.getMessage());
    System.exit(1);
    }

    System.exit(0);
    }

    }
    Ciao
    Nili

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Sag ich doch, Java ca. 3-5 Mal länger !
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Jul 2005
    Beiträge
    232
    PTF's sind alle drin (V5R2) Ich vermute mal das es am Treiber liegt. Werds morgen gleich mal testen. Habe bisher immer nur die "mitgelieferten" jt400 Treiber aus dem IFS benutzt. Kann nur so sein. Hoffe ich.

  5. #5
    Registriert seit
    Jul 2005
    Beiträge
    232
    @Nili,

    ist Deine Programm direkt auf der /400 gelaufen oder auf einem externen PC ? Und mit welcher .jar-Datei ? jt400 oder jt400native ?

    THX

  6. #6
    Registriert seit
    Sep 2002
    Beiträge
    47
    Hi!

    Habs von einem PC laufen lassen. Verwendet JTOpen 4.8 mit Java 1.5.
    JTOpen bekommst Du unter https://sourceforge.net/projects/jt400. Aus dem Zip-File brauchst Du nur jt400.jar.
    Ciao
    Nili

  7. #7
    Registriert seit
    Sep 2002
    Beiträge
    47
    Moin!

    Hab mir mal den Spass gemacht und es auf der i5 laufen lassen.
    Lief mit Java 1.4.2 und JTOpen 4.8. Zusätzlich hab
    ich den LogWriter deaktiviert, sonst war es unerträglich.

    Ergebnis i5:

    Erstlauf war ne Katastrophe hat 3 Minuten gedauert.
    Danach hat es sich eingependelt auf ca. 6 Sekunden (auch auf verschiedenen QShell-Sitzungen).

    Starte: Tue Sep 06 10:13:05 UTC 2005
    JDBC init: Tue Sep 06 10:13:08 UTC 2005
    Create Table: Tue Sep 06 10:13:08 UTC 2005
    Insert 10.000: Tue Sep 06 10:13:11 UTC 2005
    Close: Tue Sep 06 10:13:11 UTC 2005

    i5 mit jt400Native.jar:

    Erstlauf wieder schlecht mit 33 Sekunden danach gings:

    Starte: Tue Sep 06 10:24:55 UTC 2005
    JDBC init: Tue Sep 06 10:24:57 UTC 2005
    Create Table: Tue Sep 06 10:24:58 UTC 2005
    Insert 10.000: Tue Sep 06 10:25:01 UTC 2005
    Close: Tue Sep 06 10:25:01 UTC 2005

    Irgendwie kein grosser Unterschied???

    P.S. Nur so nebenbei, wenn ich den LogWriter auch auf PC rausnehme komme ich auf ne Zeit von ca. 1-2 Sekunden immer.
    Ciao
    Nili

  8. #8
    Registriert seit
    Jul 2005
    Beiträge
    232
    @Nili,

    dann versuchs doch mal mit einen CRTJVAPGM OPTIMIZE(40) Dann rennen die Programme normalerweise wie der Teufel. Außerdem : Wenn Du Dich "normal" identifiziert hast, gehst Du aus der AS400 raus und wieder rein. Das kannst Du umgehen, indem Du als Adresse LOCALHOST und als Benutzer / kennwort *CURRENT *CURRENT verwendest. Aber kann ja sein das weißt Du alles schon
    Zudem dauert das Laden der qsh ja schon einige Zeit. Wenn Du also mit RUNJVA arbeitest, musst Du die Vorlaufzeit abziehen.

  9. #9
    Registriert seit
    Sep 2002
    Beiträge
    47
    Hi!

    Ne, ne hab immer die reine Laufzeit des Connect, Insert, Close gemeint. Inder Qshell hab ich mich schon befunden. Wenn Du auf die Timestamps schaust siehst Du ja, dass der reine Insert nur ca. 3 Sekunden dauert. Auf optimieren hatte ich keine Lust und Zeit mehr.

    Ist Dein Ergebnis mit JTOpen 4.8 nun besser geworden?
    Ciao
    Nili

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •