# Netbeans 6.1 und Java Dektop Application mit integrierter DB



## Guest (5. Jun 2008)

Hallo zusammen,

tja, lange nicht mehr hiergewesen...

Ich habe ein leichtes Verständnis - Problem mit Netbeans 6.1 und der Art
und Weise, wie der Projekt-Wizard eine Java-Desktop-Anwendung mit 
einer "embedded" Datenbank handeln will... (Datenbank ist einfach JavaDB,
die aus den Java 6 Verzeichnis..)

Er verlangt ja, dass ich eine bereits vorhandende Datenbank und Tabelle angebe.. gut
und schön, mache ich zu Fuss.

Die Tabelle sieht so aus:



```
create table machines (id int generated always as identity primary key, name
varchar(40), type varchar(40), identno varchar(40));
```

Einfach nur eine Test-Tabelle, fragt nicht nach dem Sinn oder dergleichen.. Wink.

Die ID sollte sich so ja automatisch generieren, laut Referenz der DERBY (Java DB) Doku.

Im Wizard gebe ich ihm dann die Connection zur DB mit.. funktioniert auch.

Wenn ich dann in der erstellten Applikation einen neuen Datensatz anlegen will, OHNE ihm eine ID mitzugeben, wird gemeckert.. weil er explizit laut Debug-Ausgabe das Feld ID mit NULL füllen will, und das geht eben nicht...

Schön, wie sage ich ihm, "lass ID im Zweifelsfall in Ruhe?", irgendwie finde ich das Binding nicht...

Zumal da noch eine Datei

createDDL.jdbc

im Projektverzeichnis rumkraucht.. so was habe ich nur grob
im Umfeld von "Glassfish" gehört (habe ich aber noch nichts weiteres mit gemacht), deren Inhalt macht mich aber stutzig:



```
CREATE TABLE APP.MACHINES (ID INTEGER NOT NULL, NAME VARCHAR(255), TYPE VARCHAR(255), IDENTNO VARCHAR(255), PRIMARY KEY (ID))
```

Schön, wo zieht er sich denn DAS her, das hat ja nur eine ungefähre Ähnlichkeit mit dem, was ich da oben definiert habe..

Mittlerweile weiß ich, dass als Persistence API "TopLink" benutzt wird, Teil von Glassfish.. das Thema
ist mir bisher nie untergekommen, sorry.

Ich habe ja die Klasse "Machines" die mit ihren Annotations wohl die Brücke zur Tabelle darstellt.. aber
wie bringe ich der bei, dass das ID-Feld von der Datenbank gehandeld wird? "nullable false" in der 
Column-Definition von der Klasse "Machines" bringts alleine nicht, dann meckert mich die DB an, dass jemand versucht, ihr die ID zu ändern (vermutlich wegen dem "generated always" in der Definition).

Kann es sein... dass das auch gar nicht anders geht, da die ganze Persistence API ja auch DB unabhängig sein soll?

Hmm.... okay, wie gehe ich das dann korrekt an?

Danke im voraus.


----------



## Lennart (9. Jun 2008)

Hallo!

Habe das Generieren einer Swing-DB-Anwendung unter NetBeans6.1 mit MySQL 5.0 als DBMS nachvollzogen. Alles unter Ubuntu 8.04

Tabellendefinition:

```
CREATE TABLE t1 (
    id           int          not null,
    name         varchar( 60) not null,
    street       varchar( 50),
    city         varchar( 50),
    primary key (id)
) type = innodb;
```

Sehr enttäuschend finde ich die Art der Fehlerbehandlung, wenn ein Datensatz nicht gespeichert werden kann:
Auf stderr kommen jede Menge Meldungen, z. B. von der Klasse oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor
Auf GUI-Ebene kommt KEINE Meldung.
Nicht gespeicherte Records werden oberhalb des Eingabebereichs tabellarisch angezeigt und suggerieren damit eigentlich eine erfolgreiche Erfassung der Datensätze.
Erst nach Drücken von »Refresh« verschwinden die nicht gespeicherten Datensätze aus der Tabelle.







Beste Grüße
Lenni


----------



## Lennart (9. Jun 2008)

Tut mir leid, dass ich zum ID-Problem nichts beigtragen habe. Mir ging's zunächst einmal um die grundsätzliche Brauchbarkeit des generierten Programms.

Grüße
Lenni


----------

