[NEWSboard IBMi Forum]

Hybrid View

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

    FieldDescriptions

    Hallo zusammen,

    ich lese in einem Javaprogramm eine AS DBFile mit einem Loop
    Record record = theFile.readNext();
    while (record != null)
    {
    for ( int i=0 ; i <= tempNbrOfFields; i++){

    String f1 = (String) record.getField(i);
    System.out.println(record);
    }

    record = theFile.readNext();
    }


    Wenn jetzt im Satz ein gepacktes Feld steht muss ich den Inhalt des Feldes umswitchen. Also in ein String Feld umwandeln.

    Dazu hole ich mir vor dem Loop die Feldbeschreibung des Satzes mit
    tempNbrOfFields = tempRecordFormat.getNumberOfFields();
    tempFieldNames = tempRecordFormat.getFieldNames( );
    tempFieldDescriptions = tempRecordFormat.getFieldDescriptions();

    Ich hatte mir das so vorgestellt.
    if feld = packed
    dann auf String umwandeln
    endif

    Allerdings weiss ich nicht wie ich aus der FieldDescription herausbekomme ob es sich um ein gepacktes Feld handelt.

    Hat jemand eine Idee ?

    Vielen Dank für eure Bemühungen
    Gruss Michael

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

    warum tust du dir den Huddel mit dem AS400 File überhaupt an; das ist ein Fall für JDBC und Java - wenn das überhaupt. Bei einer kompletten Anwendung nimmt man für sowas z.B.: Hibernate und konfiguriert die Datenbank und schreibt das Mapping von Objekten zur Datenbank in XML und das war's.
    Wenn du denn wirklich diesen Quatsch benutzen willst:
    theFile.getRecordFormat().getFiledDescription("myF ield").getDataType()
    müsste es tun. Aber nochmal: sowas ist nur was für Masochisten - das ist ja RPG über den Java Compiler gequält und selbst da würde ich SQL bevorzugen.

    mfg

    Dieter Bender

    Zitat Zitat von mk
    Hallo zusammen,

    ich lese in einem Javaprogramm eine AS DBFile mit einem Loop
    Record record = theFile.readNext();
    while (record != null)
    {
    for ( int i=0 ; i <= tempNbrOfFields; i++){

    String f1 = (String) record.getField(i);
    System.out.println(record);
    }

    record = theFile.readNext();
    }


    Wenn jetzt im Satz ein gepacktes Feld steht muss ich den Inhalt des Feldes umswitchen. Also in ein String Feld umwandeln.

    Dazu hole ich mir vor dem Loop die Feldbeschreibung des Satzes mit
    tempNbrOfFields = tempRecordFormat.getNumberOfFields();
    tempFieldNames = tempRecordFormat.getFieldNames( );
    tempFieldDescriptions = tempRecordFormat.getFieldDescriptions();

    Ich hatte mir das so vorgestellt.
    if feld = packed
    dann auf String umwandeln
    endif

    Allerdings weiss ich nicht wie ich aus der FieldDescription herausbekomme ob es sich um ein gepacktes Feld handelt.

    Hat jemand eine Idee ?

    Vielen Dank für eure Bemühungen
    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/

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

    ich fühle mich eigentlich nicht wie ein Masochist und lerne
    ja nur. Es handelt sich nicht um ein großes Projekt oder so.Ich möchte nur wissen wie es geht um evtl.später zu bewerten ob man es verwenden kann. Denn wenn man es nicht kennt, dann
    kann man auch nicht mitreden.
    Mein Progrämmelchen sieht mittlerweile so aus.

    for ( int i=0 ; i < tempNbrOfFields; i++){

    FieldDescription fd = tempFieldDescriptions[i];
    a = fd.getDataType();
    String b = fd.getCOLHDG();
    String c = fd.getTEXT();
    String field = null;

    if (a.getInstanceType() == AS400DataType.TYPE_PACKED ) {
    java.math.BigDecimal bd = (java.math.BigDecimal) record.getField(i);
    field = bd.toString();
    } else {
    if (a.getInstanceType() == AS400DataType.TYPE_ZONED ) {
    java.math.BigDecimal bd = (java.math.BigDecimal) record.getField(i);
    field = bd.toString();
    } else {

    field = (String) record.getField(i);
    }}

    Was mir jetzt eigentlich noch fehlt ist die Beschreibung
    der Dateiattribute COLHDG und Text.
    Bei dem String b = fd.getCOLHDG(); und
    String c = fd.getTEXT();
    sind die Werte blanks.
    In der Dateibeschreibung sind die Werte für COLHDG und Text allerdings vorhanden.

    Das gleiche habe ich wenn ich Daten über SQL lese.

    Werden die SAchen im JAVA nicht gefüllt ?
    Das kann ich mir eigentlich nicht vorstellen.

    Gruss Michael

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

    wenn man alle Umwege selber gehen will, kommt man von RPG nie nach Java. Von der grandiosen Toolbox sind nur zwei Dinge zu gebrauchen: der JDBC Treiber und vielleicht noch die DataQ (weil man damit relativ einfach zwischen Java und Rest of AS400 kommunizieren kann und die AS400 kein Corba darf).
    allein schon das Code Snippet erfüllt mich mit Grausen (und das liegt nicht unbedingt an dir). In SQL sähe das in etwa so aus:

    ResultSet rs = statement.executeQuery();
    while(rs.next()){
    kundenNr = rs.getInt(KDNR);
    name = rs.getString(KDNAME);
    ....
    }
    und das wars!!! Ob da irgendwas gepackt ist, das interessiert mich doch in Java nicht die Bohne.

    In Hibernate sähe sowas in etwa so aus:
    Iterator kunden = session.iterate(from kunden);
    while kunden.hasNext(){
    current = (Kunde) kunden.next();
    }
    der Rest steht dann in (generierbarem) XML mapping. Und Hibernat übernimmt caching von Daten, weiss was gespeichert werden muss, kümmert sich um Keys etc.

    Was deine Frage im engeren angeht, da geht der Weg über das RecordFormat, wie in meinem vorigen Beitrag beschrieben - schau dir das mal in der Java Doc der DollSchachtel an.

    Dieter

    PS: nobody in the world, outside the as400 (was heißt nochmal Hühnergarten auf englisch?) weiss was record level access Klassen der Toolbox sind und da spielt die Musik, was Java angeht.


    Zitat Zitat von mk
    Hallo Dieter,

    ich fühle mich eigentlich nicht wie ein Masochist und lerne
    ja nur. Es handelt sich nicht um ein großes Projekt oder so.Ich möchte nur wissen wie es geht um evtl.später zu bewerten ob man es verwenden kann. Denn wenn man es nicht kennt, dann
    kann man auch nicht mitreden.
    Mein Progrämmelchen sieht mittlerweile so aus.

    for ( int i=0 ; i < tempNbrOfFields; i++){

    FieldDescription fd = tempFieldDescriptions[i];
    a = fd.getDataType();
    String b = fd.getCOLHDG();
    String c = fd.getTEXT();
    String field = null;

    if (a.getInstanceType() == AS400DataType.TYPE_PACKED ) {
    java.math.BigDecimal bd = (java.math.BigDecimal) record.getField(i);
    field = bd.toString();
    } else {
    if (a.getInstanceType() == AS400DataType.TYPE_ZONED ) {
    java.math.BigDecimal bd = (java.math.BigDecimal) record.getField(i);
    field = bd.toString();
    } else {

    field = (String) record.getField(i);
    }}

    Was mir jetzt eigentlich noch fehlt ist die Beschreibung
    der Dateiattribute COLHDG und Text.
    Bei dem String b = fd.getCOLHDG(); und
    String c = fd.getTEXT();
    sind die Werte blanks.
    In der Dateibeschreibung sind die Werte für COLHDG und Text allerdings vorhanden.

    Das gleiche habe ich wenn ich Daten über SQL lese.

    Werden die SAchen im JAVA nicht gefüllt ?
    Das kann ich mir eigentlich nicht vorstellen.

    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/

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

    Question

    Ich möchte diesen Thread nochmal aufleben lassen.

    Ich bin immer noch dabei mir die Datei - bzw. Feldbeschreibung in mein Java Programm zu holen.
    Bisher ist es mir ( mit der Hilfe eines Kollegen ) schon gelungen
    die Werte für Feldnamen und die Werte der Attribute TEXT
    zu holen :

    Die Feldnamen erhalte ich so:
    String FieldName = meta.getColumnName(index);

    Die Textbeschreibung erhalte ich über
    columnResultSet.getString("REMARKS")
    vorher wird das columnResultSet
    ResultSet columnResultSet = connection.getMetaData().getColumns("xx","xlib",AS File,"%");
    gefüllt.


    Soweit klappt das auch.
    Ich möchte aber noch gern die Attribute COLHDG für die
    Felder haben.

    Hat jemand einen Tipp ?




    Viele Grüße an alle
    von einem der bald Java freak ist

    Michael

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

    was treibst du da eigentlich??? MetaData ist die Welt von JDBC und AS400File ist Rekord Löffel Exzess entweder oder: Das AS400RecordFormat kennt alles, was dich interessiert, oder ist das alles so buggy, dass es nicht tut, oder willst du mich dazu provzieren mein erstes AS400 Object zu erzeugen???

    mfg

    Dieter Bender
    ratlos

    Zitat Zitat von mk
    Ich möchte diesen Thread nochmal aufleben lassen.

    Ich bin immer noch dabei mir die Datei - bzw. Feldbeschreibung in mein Java Programm zu holen.
    Bisher ist es mir ( mit der Hilfe eines Kollegen ) schon gelungen
    die Werte für Feldnamen und die Werte der Attribute TEXT
    zu holen :

    Die Feldnamen erhalte ich so:
    String FieldName = meta.getColumnName(index);

    Die Textbeschreibung erhalte ich über
    columnResultSet.getString("REMARKS")
    vorher wird das columnResultSet
    ResultSet columnResultSet = connection.getMetaData().getColumns("xx","xlib",AS File,"%");
    gefüllt.


    Soweit klappt das auch.
    Ich möchte aber noch gern die Attribute COLHDG für die
    Felder haben.

    Hat jemand einen Tipp ?




    Viele Grüße an alle
    von einem der bald Java freak ist

    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
    Hallo Dieter,

    ich habe deinen Rat befolgt und das Programm auf JDBC soweit
    umgestellt. Wie gesagt es klappt auch soweit.

    Das einzige was mir eben noch fehlt ist die Feldbeschreibung
    der COLHDG's für die DB Felder.
    In den Mata Daten erhalte ich die TEXT Beschreibung.
    Ich hatte gehofft das ich darüber auch die COLHDG Beschreibung erhalten würde. Dem scheint aber nicht so.


    Mal sehen wie es weitergeht .Ich werde mich noch weiter mit der Sache beschäftigen.

    Gruss Michael

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

    nochmal auf den Record Löffel Exzess (nicht das ich meine Empfehlung ändern will)
    <snip>
    SequentialFile kunde = new SequentialFile(moehre, KUNDEPATH);
    kunde.setRecordFormat();
    kunde.open();
    System.out.println(kunde.getRecordFormat().getFiel dDescription(1).getCOLHDG());
    System.out.println(kunde.getRecordFormat().getFiel dDescription(1).getDataType());
    </snip>
    die eventuellen Umbrüche sind nicht von mir.
    Was ist daran so schwer, das FieldDescription Object hattest du schon und ein Blick in die Javadoc : e voila! (mal abgesehen davon, dass die Dollschachtel mit dem COLHDG einen Bug hat, Qualität ist halt Qualität und das Zeugs ist Murks!).
    Ich würde mal vermuten, dass der COLHDG Bug sich irgendwie durchzieht und man da eventuell nicht drankommt, ausser mit brutaler Gewalt mit einem select Column-Heading from qsys2.syscolumns where...

    mfg

    Dieter



    Zitat Zitat von mk
    Hallo Dieter,

    ich habe deinen Rat befolgt und das Programm auf JDBC soweit
    umgestellt. Wie gesagt es klappt auch soweit.

    Das einzige was mir eben noch fehlt ist die Feldbeschreibung
    der COLHDG's für die DB Felder.
    In den Mata Daten erhalte ich die TEXT Beschreibung.
    Ich hatte gehofft das ich darüber auch die COLHDG Beschreibung erhalten würde. Dem scheint aber nicht so.


    Mal sehen wie es weitergeht .Ich werde mich noch weiter mit der Sache beschäftigen.

    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
    Hi Dieter,

    irgendwie habe ich das Gefühl das ich mich im Kreis drehe
    und das ganze Zeug scheint nicht so der Hit zu sein.

    Ich habe dein Vorschlag eingebaut:
    SequentialFile kunde = new SequentialFile(system, filePathName.getPath());

    kunde.setRecordFormat();
    kunde.open(AS400File.READ_ONLY, 100, AS400File.COMMIT_LOCK_LEVEL_NONE);
    System.out.println(kunde.getRecordFormat().getFiel dDescription(1).getCOLHDG());

    Wenn ich mir das im Debugger ansehe
    sehe ich unter RecordFormat => elementData die Feldliste
    und die Attribute Text und COLHDG sind nicht gefüllt.

    Toll.... kein Wunder das ich mich wie im Tollhaus fühle.

    Da nimmt man die Doklu von der IBM ..... meint man hat eine
    Idee... und dann klappt der ganze sch.......nicht.

    So jetzt habe ich kein Bock mehr.
    Gruss Michael

Berechtigungen

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