[NEWSboard IBMi Forum]

Thema: javaprogramm

Hybrid View

  1. #1
    Registriert seit
    Jan 2001
    Beiträge
    850

    Smile javaprogramm

    Hallo Java Fraktion,

    ich versuche gerade ein bischen mit Java zu machen. Folgendes Problem:
    Die Coonection klappt. Der SQL string klappt auch.
    Ich bekomme aber keine Daten in das Result set.
    Hat jemand eine Idee ?
    Oder vielleicht ein Rumpf wie man solche Abfragen mit Java
    erledigen kann.

    Vielen Dank
    Michael


    Connection connection;
    try {
    connection = DriverManager.getConnection("jdbc:as400://as400", "user", "passw" );
    Statement statement = connection.createStatement() ;
    ResultSet resultSet = statement.executeQuery("select * from MK.STMASTTEST " );
    // "where ststyl like 'A%%%%%' " );
    int x = resultSet.getRow();
    if (x != 0){
    String ersteSpalte = resultSet.getString(0);
    }

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

    du solltest da einen SQL Fehler bekommen (cursor state not valid) dir fehlt der Aufruf von next() des ResultSet. Ein Beispiel dazu findest du eigentlich in jedem Tutorial (Mr. Google ist dein Freund) und selbstredend auf meiner Open Source Seite.
    Ansonsten könnte es freilich nicht schaden in try catch Blöcken zumindest mal eine Diagnostic Ausgabe zu machen, damit du sofort siehst was krumm ist.

    mfg

    Dieter Bender


    Zitat Zitat von mk
    Hallo Java Fraktion,

    ich versuche gerade ein bischen mit Java zu machen. Folgendes Problem:
    Die Coonection klappt. Der SQL string klappt auch.
    Ich bekomme aber keine Daten in das Result set.
    Hat jemand eine Idee ?
    Oder vielleicht ein Rumpf wie man solche Abfragen mit Java
    erledigen kann.

    Vielen Dank
    Michael


    Connection connection;
    try {
    connection = DriverManager.getConnection("jdbc:as400://as400", "user", "passw" );
    Statement statement = connection.createStatement() ;
    ResultSet resultSet = statement.executeQuery("select * from MK.STMASTTEST " );
    // "where ststyl like 'A%%%%%' " );
    int x = resultSet.getRow();
    if (x != 0){
    String ersteSpalte = resultSet.getString(0);
    }
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Jan 2001
    Beiträge
    850
    Hallo Dieter,

    das ist es ja. wenn ich den if (x != 0) rausnehme bekomme ich den u.a Fehler.

    Ich habe aber im Debugger an der Sql stelle angehalten und
    in dem QZDAINIT Job gesehen das das SQL Statement
    auf die Lib MK und auf die Datei STMASTTEST geht.
    Ich habe auch 15000 Sätze in die Datei kopiert.

    Irgendwie will es noch nicht klappen.

    Gruss Michael



    java.sql.SQLException: Cursor position not valid.
    at com.ibm.as400.access.JDError.throwSQLException(JDE rror.java:382)
    at com.ibm.as400.access.JDError.throwSQLException(JDE rror.java:359)
    at com.ibm.as400.access.AS400JDBCResultSet.getValue(A S400JDBCResultSet.java:3589)
    at com.ibm.as400.access.AS400JDBCResultSet.getString( AS400JDBCResultSet.java:3230)
    at de.asmika.controler.GetActiveCostingCountry.SqlSta ement(GetActiveCostingCountry.java:101)
    at de.asmika.controler.StartProgramm.main(StartProgra mm.java:33)

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

    warum glaubt mir denn keiner?
    ResultSet resultSet = statement.executeQuery("select * from MK.STMASTTEST " );
    // das war der open auf den Cursor
    // und jetzt muss erst gelesen werden:
    resultSet.next();
    // und jetzt darfst du weiter machen
    String ersteSpalte = resultSet.getString(1);

    mfg

    Dieter Bender // "where ststyl like 'A%%%%%' " );


    Zitat Zitat von mk
    Hallo Java Fraktion,

    ich versuche gerade ein bischen mit Java zu machen. Folgendes Problem:
    Die Coonection klappt. Der SQL string klappt auch.
    Ich bekomme aber keine Daten in das Result set.
    Hat jemand eine Idee ?
    Oder vielleicht ein Rumpf wie man solche Abfragen mit Java
    erledigen kann.

    Vielen Dank
    Michael


    Connection connection;
    try {
    connection = DriverManager.getConnection("jdbc:as400://as400", "user", "passw" );
    Statement statement = connection.createStatement() ;
    ResultSet resultSet = statement.executeQuery("select * from MK.STMASTTEST " );
    // "where ststyl like 'A%%%%%' " );
    int x = resultSet.getRow();
    if (x != 0){
    String ersteSpalte = resultSet.getString(0);
    }
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Jan 2001
    Beiträge
    850
    Hallo Dieter,

    vielen Dank für deine Hilfe

    ich glaube Dir ja.............................

    Ich bin auch schon ein bischen weitergekommen.
    Wenn man allerdings die Syntax nicht so drauf hat
    verläuft man sich ein bischen.

    Jestzt suche ich gerade nach einem einfachen Loop
    für das lesen.

    Vielen Dank
    Michael

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

    wie wärs mit:

    while(resultSet.next())
    {
    machwas();
    }

    mfg

    Dieter Bender

    PS: und das JDBC Tutorial auf der sun Webseite ist wirklich gut!

    Zitat Zitat von mk
    Hallo Dieter,

    vielen Dank für deine Hilfe

    ich glaube Dir ja.............................

    Ich bin auch schon ein bischen weitergekommen.
    Wenn man allerdings die Syntax nicht so drauf hat
    verläuft man sich ein bischen.

    Jestzt suche ich gerade nach einem einfachen Loop
    für das lesen.

    Vielen Dank
    Michael
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Jan 2001
    Beiträge
    850

    Wink

    Hallo Dieter,

    vielen Dank für deine Hilfe, jetzt kommt aber nochmal eine Frage:

    ich rufe im Java Programm einen OS400 Befehl auf.
    wenn der Befehl durchläuft erhalte ich eine Messagelist

    AS400Message msglist = cmd.getMessageList();
    // wenn Nachrichtenm und Msg > 0
    if (msglist.length > 0){
    if (msglist[1].getSeverity() > 0){
    for (int i=0; i < msglist.length; i++){
    System.out.print ( msglist[i].getID() );
    System.out.print ( ": " );
    System.out.println( msglist[i].getText() );
    int m = msglist[i].getSeverity();
    ok = "error";
    }}}


    Jetzt meine Frage: Da ja unter Umständen mehrere Nachrichten auftauchen ist die Frage wie ich feststellen
    kann ob der Befehl nun korrekt abgelaufen ist oder nicht.

    Jetzt setzte ich den Fehler wenn
    getSeverity > 0 ist.
    Das klappt aber nur für die erste Nachricht..........

    Gruss Michael

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

    sletsam, seltsam, warum sollte man aus Java einen OS/400 Command aufrufen, da würde ich mal über das Design nachdenken...
    Wenn man das aber nun partout machen will:
    AS400Message msglist = cmd.getMessageList();
    liefert dir ein Array of AS400Message und mit msglist[i] kommst du an die Einträge dran (von i=0 bis messagelist.lenght() und getSeverity() liefert dir die Wertigkeit; mehr brauchst du doch nicht. Falls du dich für den Text oder sowas interessierts, dann schau mal in der DollBox Doku nach, was eine AS400Message so alles kann.

    mfg

    Dieter Bender

    Zitat Zitat von mk
    Hallo Dieter,

    vielen Dank für deine Hilfe, jetzt kommt aber nochmal eine Frage:

    ich rufe im Java Programm einen OS400 Befehl auf.
    wenn der Befehl durchläuft erhalte ich eine Messagelist

    AS400Message msglist = cmd.getMessageList();
    // wenn Nachrichtenm und Msg > 0
    if (msglist.length > 0){
    if (msglist[1].getSeverity() > 0){
    for (int i=0; i < msglist.length; i++){
    System.out.print ( msglist[i].getID() );
    System.out.print ( ": " );
    System.out.println( msglist[i].getText() );
    int m = msglist[i].getSeverity();
    ok = "error";
    }}}


    Jetzt meine Frage: Da ja unter Umständen mehrere Nachrichten auftauchen ist die Frage wie ich feststellen
    kann ob der Befehl nun korrekt abgelaufen ist oder nicht.

    Jetzt setzte ich den Fehler wenn
    getSeverity > 0 ist.
    Das klappt aber nur für die erste Nachricht..........

    Gruss Michael
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Jan 2001
    Beiträge
    850
    Hallo Dieter,

    es geht mir erstmal nicht um eine Designfrage. Ich
    probiere nur verschiedene Zugriffsmethoden.

    Trotzdem: Wir haben auf der 400 mehrere Test und
    Produktionsumgebungen. Das switchen der Libarylist etc.
    wird durch einen Command geregelt.
    Warum sollte ich den nicht benutzten ?

    Gruss Michael

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

    weil das eine Eigenschaft der Connection ist und bei den Properties des Treibers eingestellt wird.
    Im übrigen sollte man auch mal über Fug oder Unfug von Library Lists nachdenken!!!
    Für das auffinden von Programmen und Properties ist das wohl in Ordnung, aber für die Lokalisierung von Dateien wohl ein übler Scherz: erst installiere ich eine Datenbank, die referentielle Integrität und allen Schmonz kann und dann geh ich her und sage aus welcher Bibliothek (= Datenbank) die einzelnen Dateien kommen ist mir wurscht.
    Richtig wäre:
    Verwendung Naming Conventions *SQL und default Schema benutzen; dann stellt man sicher, dass nur zusammen gehörige Daten verwendet werde.
    Und sage mir keiner: bei uns funktioniert das Bestens, wer hat noch keine Applikation gesehen, die Lagerbestaände aus echt holt und in Test fakturiert!!!

    mfg

    Dieter Bender

    Zitat Zitat von mk
    Hallo Dieter,

    es geht mir erstmal nicht um eine Designfrage. Ich
    probiere nur verschiedene Zugriffsmethoden.

    Trotzdem: Wir haben auf der 400 mehrere Test und
    Produktionsumgebungen. Das switchen der Libarylist etc.
    wird durch einen Command geregelt.
    Warum sollte ich den nicht benutzten ?

    Gruss Michael
    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. Starten Java auf dem PC
    By mk in forum NEWSboard Java
    Antworten: 4
    Letzter Beitrag: 11-12-06, 08:51
  2. Aufruf Java Pgm mit Entry Parameter
    By mk in forum NEWSboard Java
    Antworten: 15
    Letzter Beitrag: 21-02-05, 06:54
  3. runjva auf der AS400
    By michael2001 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 21-11-01, 15:05

Berechtigungen

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