PDA

View Full Version : DTAARA(Nummerkreis) per Java-Code um eins erhöhen



Seiten : [1] 2

stefan24
12-05-10, 09:25
Hallo zusammen..
Vorneweg muss ich dazu sagen, dass ich gerade Java lerne und am rumversuchen bin.. Evt. kann mir jemand mit meinem Code ein bischen unter die Arme greifen..

Ich würde gerne per Java-Code eine DTAARA der ISeries auslesen und den Wert der DTAARA um eins erhöhen.. (Nummernkreis)..

Mein Code:

public class TestDTAARA {

public static void main(String[] args) {
AS400 systemI = new AS400();
String value = " ";
int iValue;
try{
QSYSObjectPathName path = new QSYSObjectPathName("TESTLIB","DTTEST","DTAARA");
CharacterDataArea dataArea = new CharacterDataArea(systemI, path.getPath());
value = dataArea.read().trim();

iValue = Integer.valueOf(value).intValue();

iValue = iValue + 1;

value = (new Integer(iValue)).toString();

dataArea.write(value);

} catch (Exception e) {
System.out.println(e);
}

}
}Wenn ich das so mache, dann kommt bei gelesenem Inhalt "00000000448" folgendes in der DTAARA an:
"44900000448"..

Kann mir jemand erklären, wie ich den Wert nun wieder rechtsbündig in value schreiben kann, damit dann der write entsprechend richtig in die DTAARA schreibt?

Danke schonmal im voraus und sorry, wenn das eine "dumme" Frage ist :)

Grüße
Stefan

Fuerchau
12-05-10, 09:31
Ich würde es nicht mit toString ausgeben sondern den Wert mittels Format entsprechend aufbereiten.

stefan24
12-05-10, 09:46
entschuldige bitte, wenn ich nochmal "doof" fragen muss, aber könntest du mir das evt. ein bischen genauer erläutern?

BenderD
12-05-10, 10:06
... schüttel
da dreht sich mir doch alles um, solche Altlasten noch in Java zu übertragen, sowas gehört in die Datenbank. BTW: schief gehen tut das eh, wenn das zwei gleichzeitig versuchen.

D*B

Fuerchau
12-05-10, 10:57
@Dieter
Er könnte ja ggf. noch einen ALCOBJ/DLCOBJ drumbauen ;).

@Stefan
Wie man in Java formatiert ?
Da muss es doch entsprechende Funktionen geben, numerische Werte zu formatieren, so dass du anschliessend einen String mit Vornullen erhältst.

BenderD
12-05-10, 12:27
dafür gibt es in Java
DecimalFormat (Java 2 Platform SE v1.4.2) (http://java.sun.com/j2se/1.4.2/docs/api/java/text/DecimalFormat.html)
und für richtiges Gehuddel gibt es in der Toolbox noch Klassen mit AS/400 Typen (AS400ZonedDecimal etc.), da kann man jeden Schmutz reinpacken, Exceptions fliegen dann beim rausholen (würg, schüttel)

Das ist doch nix zum Java lernen, da gibt es besseres:
- Java-Einfuehrungen von H.Partl (http://www.boku.ac.at/javaeinf/)
- The Java™ Tutorials (http://java.sun.com/docs/books/tutorial/)
- Galileo Computing :: Java ist auch eine Insel (8. Auflage) (http://openbook.galileocomputing.de/javainsel8/)
und vieles andere mehr.

D*B


@Dieter
Er könnte ja ggf. noch einen ALCOBJ/DLCOBJ drumbauen ;).

@Stefan
Wie man in Java formatiert ?
Da muss es doch entsprechende Funktionen geben, numerische Werte zu formatieren, so dass du anschliessend einen String mit Vornullen erhältst.

stefan24
12-05-10, 12:41
@fuerchau: Danke für den Tip mit dem formatieren..

@Bender: jo DecimalFormat hab ich jetzt benutzt.. (siehe Code).. hälst du das jetzt für zu fehleranfällig oder wie darf ich dich verstehen?


public static void main(String[] args) {
AS400 systemI = new AS400();
String value;
int intValue;
String valueFormat = "0";
try{
QSYSObjectPathName path = new QSYSObjectPathName("GRANER","DTTEST","DTAARA");
CharacterDataArea dataArea = new CharacterDataArea(systemI, path.getPath());
value = dataArea.read().trim();
for (int i = 0; i < value.length()-1; i++) {
valueFormat = valueFormat + "0";
}
intValue = Integer.valueOf(value).intValue();
value = new java.text.DecimalFormat(valueFormat).format(intVal ue+1);

dataArea.write(value);

} catch (Exception e) {
System.out.println(e);
}

BenderD
12-05-10, 13:09
A liest
B liest
A schreibt
B schreibt

B gewinnt gemäß dem Humoristenprinzip (wer zuletzt lacht...)

dagegen hat man im vorigen Jahrhundert Datenbanken erfunden, da nennt man das lost update und es ist geradezu ein Treppenwitz der Geschichte und Realsatire, dass man auf der Maschine, die als erste Datenbank konnte, dann so wichtige Informationen in eine DTAARA reinschreibt... mich schüttelts schon wieder

D*B


@fuerchau: Danke für den Tip mit dem formatieren..

@Bender: jo DecimalFormat hab ich jetzt benutzt.. (siehe Code).. hälst du das jetzt für zu fehleranfällig oder wie darf ich dich verstehen?


public static void main(String[] args) {
AS400 systemI = new AS400();
String value;
int intValue;
String valueFormat = "0";
try{
QSYSObjectPathName path = new QSYSObjectPathName("GRANER","DTTEST","DTAARA");
CharacterDataArea dataArea = new CharacterDataArea(systemI, path.getPath());
value = dataArea.read().trim();
for (int i = 0; i < value.length()-1; i++) {
valueFormat = valueFormat + "0";
}
intValue = Integer.valueOf(value).intValue();
value = new java.text.DecimalFormat(valueFormat).format(intVal ue+1);

dataArea.write(value);

} catch (Exception e) {
System.out.println(e);
}

stefan24
12-05-10, 13:13
achso.. dass war in die richtung gemeint, warum der nummernkreis überhaupt in einer DTAARA gespeichert wird..

ja, da stimm ich Dir vollkommen zu..

nur ist das hier nicht auf meinem Mist gewachsen.. Demnach muss ich mich mit den Gegebenheiten auseinander setzen.. ;)

seis drum.. dass ganze funktioniert jetzt so ganz gut..

Danke nochmal für die helfenden Infos :)

Fuerchau
12-05-10, 13:17
Um dem Problem der Sperre aus dem Weg zu gehen:
Es gibt doch sicherlich ein Programm, dass die Nr. mit entsprechenden Sperren hochzählt.
Du kannst aus Java mit der Toolbox ja auch dieses Programm aufrufen (oder auch ein neues schreiben) und den Wert zurückgeben lassen.