[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2007
    Beiträge
    8

    Ausführung von SQL-Statements sehr langsam

    Hallo,

    ich bin ziemlich neu beim Thema Java. Jetzt habe ich mir eine kleine Testanwendung gebaut, bei der eine Maske mit verschiedenen Eingabefeldern ausgegeben wird. Bei einigen dieser Felder dürfen nur Werte eingegeben werden, bei denen ein entsprechender Satz in einer Tabelle auf der AS/400 vorhanden sein muss. Beispiel: Die Maske enthält ein Feld "Benutzer". Jetzt soll in diesem Feld nur ein Benutzer eingetragen werden dürfen, der auf der AS/400 in der Tabelle USRPF hinterlegt ist. Wenn jetzt also auf den OK Button geklickt wird, dann wird eine Methode aufgerufen, die die eingegebenen Werte auf Gültigkeit überprüft. Das Problem ist jetzt die grausame Performance, mit dem das Ganze abläuft. Hier mal ein Beispiel, wie ich solch eine Prüfung mache.

    PHP-Code:
    found false;
    select null;
    rs null;
    try {
     
    select jdbcConnection.createStatement();
     
    rs select.executeQuery("SELECT COUNT(*) FROM USRLF01 WHERE USR='" 
                                     
    textOwner.getText() + "'");
     if (
    rs.next() && rs.getLong(1) != 0) {
      
    found true;
     }
    }
    catch (
    SQLException e) {
    }
    if (
    rs != null) {
     try {
      
    rs.close();
     } 
     catch (
    SQLException e1) {
     }
    }
    if (
    select != null) {
     try {
      
    select.close();
     } 
     catch (
    SQLException e1) {
     }
    }
    if (!
    found) {
     
    setErrorMessage("The value in field 'User' is not valid.");
     
    textOwner.setFocus();
     return 
    false;   

    Von diesen Prüfungen habe ich in der entsprechenden Methode 15 an der Zahl. Wie kann ich das Ganze beschleunigen? Mache ich etwas grundsätzlich falsch?

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    das sollte in dieser Form, wie es ist, im Bereich von Zehntel Sekunden liegen, falls das länger dauert ist zu untersuchen, woran das liegt. Da kommen mehrere Kandidaten in Betracht; z.B.: ungeeignete Hardware, fehlende Zugriffspfade, fehlende PTFs, Ressourcen Engpässe der AS/400. Einstiegspunkt ist da bei mir meist der Database Monitor, um zu ermitteln ob das ganze von der Datenbank her kommt.
    An dem Code lässt sich noch verbessern: statt Statement PreparedStatement verwenden. Bei entsprechendem Cachen der PreparedStatements (siehe auch den Thread zu ConnectionPool) macht es das auch schneller, aber Sekunden sind hier nicht zu holen.

    mfg

    Dieter Bender


    Zitat Zitat von BurgerKing Beitrag anzeigen
    Hallo,

    ich bin ziemlich neu beim Thema Java. Jetzt habe ich mir eine kleine Testanwendung gebaut, bei der eine Maske mit verschiedenen Eingabefeldern ausgegeben wird. Bei einigen dieser Felder dürfen nur Werte eingegeben werden, bei denen ein entsprechender Satz in einer Tabelle auf der AS/400 vorhanden sein muss. Beispiel: Die Maske enthält ein Feld "Benutzer". Jetzt soll in diesem Feld nur ein Benutzer eingetragen werden dürfen, der auf der AS/400 in der Tabelle USRPF hinterlegt ist. Wenn jetzt also auf den OK Button geklickt wird, dann wird eine Methode aufgerufen, die die eingegebenen Werte auf Gültigkeit überprüft. Das Problem ist jetzt die grausame Performance, mit dem das Ganze abläuft. Hier mal ein Beispiel, wie ich solch eine Prüfung mache.

    PHP-Code:
    found false;
    select null;
    rs null;
    try {
     
    select jdbcConnection.createStatement();
     
    rs select.executeQuery("SELECT COUNT(*) FROM USRLF01 WHERE USR='" 
                                     
    textOwner.getText() + "'");
     if (
    rs.next() && rs.getLong(1) != 0) {
      
    found true;
     }
    }
    catch (
    SQLException e) {
    }
    if (
    rs != null) {
     try {
      
    rs.close();
     } 
     catch (
    SQLException e1) {
     }
    }
    if (
    select != null) {
     try {
      
    select.close();
     } 
     catch (
    SQLException e1) {
     }
    }
    if (!
    found) {
     
    setErrorMessage("The value in field 'User' is not valid.");
     
    textOwner.setFocus();
     return 
    false;   

    Von diesen Prüfungen habe ich in der entsprechenden Methode 15 an der Zahl. Wie kann ich das Ganze beschleunigen? Mache ich etwas grundsätzlich falsch?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

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 UDF Function ausführung mit Fehler
    By jakarto in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-07-06, 13:41
  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
  •