# DataTable in Java? (nicht JSF)



## it-girl (19. Mai 2011)

Hallo zusammen,

ich schreibe gerade ein Visual Basic Programm in Java um. Das Programm greift unter anderem auf eine DB2-Tabenbank zu. In VB steht dann zB 
	
	
	
	





```
Dim datatable As DataTable
```
 (was soviel heißt wie 
	
	
	
	





```
DataTable datatable;
```
, ist also eine Variablendeklaration).
Nun brauche ich genau sowas in "ganz normalem" Java (nicht JSF!).
Hab auch schon ein paar Sachen gefunden, aber leider finde ich nirgends die .jar-Files dazu, damit Eclipse beim import nicht meckert.

Gefunden habe ich zB:

org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable
org.jdesktop.dataset.DataTable
gov.sns.tools.data.DataTable

Kann mir da vielleicht jemand einen Link zu so einem .jar-File posten? Es muss nicht eines von den obigen sein, Hauptsache, es funktioniert und hat noch so was wie DataRow und DataColumn mit entsprechenden Methoden dabei.

Danke schon mal für eure Antworten.

LG it-girl


----------



## Gast2 (19. Mai 2011)

Was möchtest du den machen? Die Tabelle in einer UI darstellen? Da würd ich  normalerweise einfach ein Select ausfürhen und dann aus dem Resultset ein TableModel für eine JTable aufbauen.


----------



## Tomate_Salat (19. Mai 2011)

schön dass du den Namen einer Klasse (oder was auch immer das in VB ist) schreibst, aber nicht, was diese machen soll. Erkläre mal, was die DataTable genau machen soll, dann kann man dir hier sicher äquivalent vorschlagen.

Wenn es um Datenbanken geht, dann schau mal hier: Galileo Computing :: Java ist auch eine Insel – 24 Datenbankmanagement mit JDBC.


----------



## maki (19. Mai 2011)

Hi,

du verwechselst da etwas.

Eine JSF DataTable bzw. Eclipse DataTable hat nix mit einer .NET/VB DataTable zu tun.
Bei den ersten beiden geht es um Widgets, nämlich Tabellen in einer GUI.
Bei letzterem geht es um Datenbanktabellen 

Du willst wohl etwas wie ein RowSet, ist eher unüblich in Java, vielleicht hilft dir dieeses Tutorial: The JDBC Tutorial: Chapter 5 - Rowset Tutorial


----------



## it-girl (20. Mai 2011)

@ fassy: Ich möchte die Tabellen an sich nicht darstellen, ich möchte nur SELECTs drauf ausführen und das Ergebnis in einer DataTable zwischenspeichern, sodass ich mit dieser neuen Tabelle weiterarbeiten kann.

@ Tomate_Salat:Guckst du hier :rtfm:http://msdn.microsoft.com/de-de/library/system.data.datatable(VS.80).aspx "Stellt eine Tabelle mit im Arbeitsspeicher befindlichen Daten dar."

@ maki: Ja und ich brauche was mit Datenbanktabellen. Kann man da denn nichts gleichwertiges in Java finden? Bzw. kann man RowSet damit vergleichen? Und warum ist das in Java unüblich? Danke für den Link, werd ihn mir gleich mal durchlesen.

Könnte man VB-DataTable nicht vielleicht auch mit Java-ResultSet vergleichen?


----------



## Tomate_Salat (20. Mai 2011)

it-girl hat gesagt.:


> Könnte man VB-DataTable nicht vielleicht auch mit Java-ResultSet vergleichen?



Ich denke schon. ResultSet ist das, was du bei einer Abfrage zurück bekommst (siehe meinen oben geposteten Link)

[java=33]
ResultSet rs = stmt.executeQuery( "SELECT * FROM Customer" );
while ( rs.next() )
  System.out.printf( "%s, %s, %s%n", rs.getString(1),
                     rs.getString(2), rs.getString(3) );
[/code]


----------



## maki (20. Mai 2011)

In Java sieht man die Sache eher objektorientiert, d.h. ich hab im Speicher Objekte, die mit der DB synchronisiert werden, entweder direkt per JDBC/SQL, oder per ORM.
Das ist in .NET unüblich 
Da arbeitet man ohne große Abstraktion/OOAD direkt mit Datenbank Tabellen bzw. Zeilen, wie gesagt, das RowSet ist der DataTable am ähnlichsten, wird aber unter Java nicht oft benutzt.
Ein ORM, was eben nicht häufig anzutreffen ist in .NET, wäre zB. NHibernate oder das Entity Framework (falls das noch so heisst).

Man kann eben nicht einfach Programme 1:1 umschreiben, vor allem kein prozedurales VB Programm einfach mal so zu einem OO Java Programm machen in dem man nur ein paar Imports ändert


----------



## it-girl (20. Mai 2011)

Also das mit dem ResultSet klappt glaub ich ganz gut. Das entspricht nun in etwa der VB-DataTable.
Nun brauche ich aber noch etwas in Java, das in etwa einer VB-DataRow entspricht. Gibt es da auch was?

Infos zu VB-DataRow: "Stellt eine Datenzeile in einer DataTable dar." DataRow-Klasse (System.Data)
Demnach brauche ich etwas, das eine Zeile in einem ResultSet darstellt, falls das überhaupt möglich ist?

Liege ich richtig, dass ich eigentlich nicht wirklich eine "DataRow" brauche, sondern das auch anders lösen kann, zB neue Zeile hinzufügen mit 
	
	
	
	





```
INSERT INTO...
```
 oder durchlaufen mit 
	
	
	
	





```
ResultSet.next()
```
oder Inhalt ausgeben mit 
	
	
	
	





```
System.out.println(ResultSet.getString/getInteger/...(int column));
```
Das müsste doch eigentlich auch gehen oder hat jemand eine bessere Lösung?

@ maki: Du hast Recht, das habe ich gar nicht bedacht, dass VB prozedural ist :autsch: Aber gut, dass du es sagst


----------



## Gast2 (20. Mai 2011)

Nein, gibt es nicht. Am besten erstellst du dir selber eine Klasse die jeweils ein Row darstellt.


----------



## Tomate_Salat (20. Mai 2011)

An der Stelle verweise ich nochmal auf die Insel. Über das ResultSet kannst du Zeilenweise das Ergebnis durchgehen. Mit getXXX kannst du dir den Wert zurückgeben lassen. Du musst keine indexzahlen nutzen, du kannst auch die column mitangeben: [c]getInt("id");[/c]. 

Hier findest du ein komplettes Beispiel zum Eintragen und Auslesen von Daten.


----------



## it-girl (20. Mai 2011)

> Zitat von Tomate_Salat:
> An der Stelle verweise ich nochmal auf die Insel.


Ja genau da hab ich das her 

@ Tomate_Salat: Danke für den Beispiel-Link!

Vielen Dank euch, habt mir sehr geholfen :toll:

LG it-girl


----------



## Gast2 (20. Mai 2011)

Wenn du dich damit befasst wäre es auch gut dir direkt die PreparedStatements anzusehen:

Using Prepared Statements (The Java™ Tutorials > JDBC(TM) Database Access > JDBC Basics)


----------

