PDA

View Full Version : FieldDescriptions



mk
02-03-05, 09:26
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

BenderD
02-03-05, 18:53
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("myField").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


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

mk
03-03-05, 16:34
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

BenderD
03-03-05, 17:09
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.



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

mk
10-03-05, 13:41
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",ASFile,"%");
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

BenderD
10-03-05, 23:38
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


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",ASFile,"%");
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

mk
11-03-05, 08:11
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

BenderD
11-03-05, 09:57
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




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

mk
11-03-05, 10:54
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