Portable SQL in Netbeans

Allgemeine Themen rund um dem Appl.-Server GlassFish

Moderator: wegus

Antworten
Bend0r
Beiträge: 4
Registriert: 27.04.2011, 09:05

Portable SQL in Netbeans

Beitrag von Bend0r » 27.04.2011, 09:22

Hallo liebe Community,

folgendes Anliegen habe ich, was ich hoffe hier klären zu können...

In der Schule sind wir Programmieren wir derzeit mit Netbeans/Java.
Unser Lehrer hat uns nun über die Osterferien den Auftrag erteilt eine CD/DVD Verwaltung zu entwickeln.
Das lustige daran ist, das A) Gerade erst mit Arrays fertig sind und B) Wir nicht mal das Thema Exporte und Importe angekratzt haben.

Ich habe mich nun schon etwas mit dem Thema versucht auseinander zu setzen, jedoch habe ich bisher keine zufriedenstellenden Lösung gefunden.

Folgendes soll laut Aufgabenstellung beachtet werden:

Die eingetragenen Musik CDs und DVDs befinden sich in getrennten Schränken wobei in jeden Schrank nur 20 CDs/DVDs passen (Done).
Der Benutzer soll nun Daten wie Nummer, Titel, Track, Interpret etc. eingeben können (Done).
Nun soll der Benutzer nach Tracks, Interpreten oder Alben suchen können die gleichzeitig nach der Indexnummer oder alphabetisch sortiert werden.


So, ich habe bereits mit BufferWriter so weit geschafft, das ich eine *.txt Datei ausgeben kann.
Leider erschwert sich hier für mich die suche und formatierte Ausgabe der Daten.

Mir wäre es am liebsten wenn ich das ganze über eine Portable DB machen könnte, da ich bereits Erfahrung mit MySQL, Oracle und Postgres habe.
Das Problem ist, das die DB Portable sein sollte, nicht installiert werden soll und (für mich) leicht in Java einzubinden sein sollte.
Ich habe bereits Geschichten wie Derby ausprobiert, nur leider habe ich da null Durchblick gehabt.
Google brachte mir leider auch keine Lösung, da ich mir nicht alles einfach nur zusammen klicken will, sondern individuell anpassen möchte.
Probleme gab es daher, da ich beim zusammenklicken im Code nicht mehr durchblicken konnte was nun was ist :(!
Gibt es eine Möglichkeit und eine DB die man nicht installieren muss, die leicht in Java einzubinden ist und mit der ich sehr einfaches SQL wie "Insert into" oder "drop table" usw. benutzen kann?

Bin für jede Hilfe sehr dankbar!

Benutzeravatar
smurfi
Site Admin
Beiträge: 1623
Registriert: 29.06.2006, 11:33
Wohnort: Wuppertal
Kontaktdaten:

Re: Portable SQL in Netbeans

Beitrag von smurfi » 27.04.2011, 10:47

Hallo,

als DB die du nicht installieren muss kannst du JavaDB nehemen, die kannst du einfach mit ausliefern.

Gruß
Michael

Bend0r
Beiträge: 4
Registriert: 27.04.2011, 09:05

Re: Portable SQL in Netbeans

Beitrag von Bend0r » 27.04.2011, 11:18

Hi Smurfi,

danke schon mal für die Antwort.
Ich habe glaube ich bereits mit JavaDB (Derby) gearbeitet, jedoch ohne zufriedenstellendes Ergebnis.
Ich möchte es gerne wie folgt machen:

Verwaltung [DB]
|-> CDs [Table | CD_ID,CD_NUMMER, CD_TITEL]
|-> CD_Track [Table | CD_ID, TR_ID]
|-> Tracks [Table | TR_ID, TR_NUMMER, TR_TITEL, TR_INTERPRET usw.]


Nun möchte ich als erstes selbst eine Verbindung zur DB mit dem User "test" und dem Psw "test" herstellen (hab ich bisher noch nicht Manuell geschafft).

Jetzt habe ich ein Panel, wo sich das TextField2 "CD-Titel" [Variable String cdtitel] und TextField1 "CD_NUMMER" [Variable int cdnummer] befinden.
Man trägt nun den Titel und die Nummer ein und drückt auf speichern.
Folgendes soll nun passieren:
INSERT INTO CDs (CD_NUMMER, CD_TITEL)
VALUES (
"cdtitel",
cdnummer);
.
Als ich mit Derby gearbeitet habe, konnte ich zwar über 4/5 Klicks solch eine ähnliche SQL finden,
jedoch ist mir das etwas zu sehr verschachtelt und kompliziert.
Gibt es eine Möglichkeit das ich direkt auf den Button das SQL setze?

ebaumann
Beiträge: 285
Registriert: 22.01.2009, 08:53
Wohnort: Würzburg
Kontaktdaten:

Re: Portable SQL in Netbeans

Beitrag von ebaumann » 28.04.2011, 10:54

Derby als eingebettete Datenbank ist eine gute Idee, zumal es oft auf den Rechnern installiert ist, aber NetBeans kann dir auch die erforderlichen JARs in den dist-Ordner deiner Anwendung packen (Download von Apache, dort lesen, welche JARs erforderlich sind und diese über den Properties-Dialog dem Projekt hinzufügen). Der Connection-URL-String sieht dann so aus: "jdbc:derby:{0};create=true", wobei {0} ein von mir gewählter Platzhalter für das Verzeichnis ist, in dem die Datenbank gespeichert werden soll und z.B. mit dem MessageFormat oder einer String-Replace-Methode ersetzt wird durch den Verzeichnispfad, bezogen z.B. aus einem File-Objekt (File.getAbsolutePath()). "create" sorgt dafür, dass eine nicht existierende Datenbank neu erzeugt wird.

SQL-Anweisungen sollten nicht in einen "Button gesetzt" werden. Vielmehr solltest du GUI und "Datenbanklogik" (Teil des Model) trennen. Ein Teil wird so aussehen, dass du beim Start der Anwendung prüfst, ob die erforderlichen Tabellen existieren und diese bei Bedarf neu erzeugst. Der Andere Teil ist die Manipulation der Datenbank: INSERTs, UPDATEs, DELETEs von Datensätzen. Diese sollten separat in einer anderen Klasse erfolgen. Du definierst dann eine Action, die jene Klasse nutzt und eine Action lässt sich leicht einem Button zuordnen, ebenso einem Menü-Item oder direkt aufrufen, beispielsweise über einen Tastatur-Shortcut.

Das alles ist nicht trivial: Connection-Pool verwalten, Freigeben von Connection-, ResultSet-, Statement-Objekten, Behandeln von Exceptions. Noch besser als die JDBC-Schnittstelle zu benutzen, wäre JPA einzusetzen und eine dessen Implementierungen, beispielsweise Hibernate. Das alles erfordert etliche Einarbeitungszeit, falls du diese investieren willst, ist das gut für dein Weiterkommen.

Mein Gefühl sagt mir, besser wäre, vorerst auf die Datenbank zu verzichten, und zu überlegen wie View (GUI) und Model zu trennen sind und ein "sauberes" Model zu entwicklen, die Beziehungen der Objekte (CD, Lied, Interpret, ...) mit UML zu modellieren sowie anschließend die Anwendungsfälle wie "CD hinzufügen", "Nach Titel suchen" etc. Denkst du in Tabellen, übersiehst du vermutlich einiges, z.B. sieht die Spalte TR_INTERPRET für mich aus wie ein VARCHAR-Feld anstelle einer (sinnvolleren) Verknüpfung eines Track-Objekts mit einem Interpret-Objekt (Fremdschlüssel zu einer Interpret-Tabelle). Und vielleicht sollten die Beziehungen anders aussehen? Wo sind die Grenzen (Es gibt viele unterschiedliche Musikarten, die nicht in dieses Schema passen, beispielsweise Klassik, das mussten die ID3-Entwickler durchleben, auf deren Seite sind interessante Gedanken dazu, wie Musik zu taggen ist)? Wie können diese auf die Gegenwart sinnvoll übertragen werden - d.h., die CD wird zunehmend ein Nischenprodukt, da Stücke heruntergeladen werden als Dateien ...

Aber bevor all das besprochen wird, sollten die Sprachgrundlagen möglichst vollständig bekannt sein und anschließend, wie View und Model sinnvoll getrennt werden, in NetBeans gibt es mindestens drei Varianten: 1. "Einfache" Java-Anwendung, dies sollte für den Anfang genügen - gute Quelle: http://download.oracle.com/javase/tutor ... index.html, 2. "Desktop"-Anwendung, die ein bestimmtes Framework benutzt, das dann zu erlernen ist und 3. RCP-Anwendung, die flexibelste Lösung, die jedoch die Kenntnis von 1. voraussetzt, Java sollte möglichst "vollständig" beherrscht werden und viel Einarbeitungszeit einkalkuliert.

Bend0r
Beiträge: 4
Registriert: 27.04.2011, 09:05

Re: Portable SQL in Netbeans

Beitrag von Bend0r » 29.04.2011, 11:48

Hi,

also ich bin wie folgt gekommen...
Ich habe nun eine Verbindung über Java zu meiner DB herstellen können.
Ich kann habe ebenso bereits Tables erstellt und gelöscht (über java).
Ich kann sogar Daten in die DB/Table schreiben, jedoch habe ich nun folgendes Problem.

Hier erst mal der Code:

Code: Alles auswählen

import java.sql.*;

public class NewJFrame extends javax.swing.JFrame {

    Connection con = null;


    String  cd = "CDIndex",
            tr = "TrackIndex",
            cdtr = "CDTracks"
            ;



    public NewJFrame() {
        initComponents();
//        this.optionmenu.setVisible(false);
//        this.cdanlegenmenu.setVisible(false);
    }


    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        mainmenu = new javax.swing.JPanel();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        optbutton = new javax.swing.JButton();
        optionmenu = new javax.swing.JPanel();
        jTextField1 = new javax.swing.JTextField();
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        optcdidxcr = new javax.swing.JButton();
        optcdidxdrop = new javax.swing.JButton();
        optcdtrcreate = new javax.swing.JButton();
        cdanlegenmenu = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        cdnummerfield = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        cdtitelfield = new javax.swing.JTextField();
        insertcdbutton = new javax.swing.JButton();
        cdanlegeninfo = new javax.swing.JTextField();
        jPanel3 = new javax.swing.JPanel();
        cdauslesen = new javax.swing.JTextField();
        jButton2 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton3.setText("CD Anlegen");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jButton4.setText("jButton4");

        jButton5.setText("jButton5");

        optbutton.setLabel("Konfig");
        optbutton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                optbuttonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout mainmenuLayout = new javax.swing.GroupLayout(mainmenu);
        mainmenu.setLayout(mainmenuLayout);
        mainmenuLayout.setHorizontalGroup(
            mainmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 130, Short.MAX_VALUE)
            .addGroup(mainmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainmenuLayout.createSequentialGroup()
                    .addGap(13, 13, 13)
                    .addGroup(mainmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jButton4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 107, Short.MAX_VALUE)
                        .addComponent(jButton3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 107, Short.MAX_VALUE)
                        .addComponent(jButton5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 107, Short.MAX_VALUE)
                        .addComponent(optbutton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 107, Short.MAX_VALUE))
                    .addContainerGap()))
        );
        mainmenuLayout.setVerticalGroup(
            mainmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 132, Short.MAX_VALUE)
            .addGroup(mainmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(mainmenuLayout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jButton3)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jButton4)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jButton5)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(optbutton)
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
        );

        jTextField1.setEditable(false);

        jButton1.setActionCommand("jButton1");
        jButton1.setLabel("Verbindung zur DB prüfen");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabel1.setText("Datenbank Konfiguration");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                    .addComponent(jButton1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addContainerGap())
        );

        jLabel2.setText("Tabellen Konfiguration");

        optcdidxcr.setLabel("Tabelle "+cd+" anlegen");
        optcdidxcr.setMaximumSize(new java.awt.Dimension(155, 23));
        optcdidxcr.setMinimumSize(new java.awt.Dimension(155, 23));
        optcdidxcr.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                optcdidxcrActionPerformed(evt);
            }
        });

        optcdidxdrop.setLabel("Tabelle "+cd+" löschen");
        optcdidxdrop.setMaximumSize(new java.awt.Dimension(155, 23));
        optcdidxdrop.setMinimumSize(new java.awt.Dimension(155, 23));
        optcdidxdrop.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                optcdidxdropActionPerformed(evt);
            }
        });

        optcdtrcreate.setLabel("Tabelle "+tr+" anlegen");
        optcdtrcreate.setMaximumSize(new java.awt.Dimension(155, 23));
        optcdtrcreate.setMinimumSize(new java.awt.Dimension(155, 23));
        optcdtrcreate.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                optcdtrcreateActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 253, Short.MAX_VALUE)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(optcdtrcreate, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(optcdidxdrop, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(optcdidxcr, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 198, Short.MAX_VALUE))
                        .addContainerGap())))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(optcdidxcr, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(optcdidxdrop, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(optcdtrcreate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(120, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout optionmenuLayout = new javax.swing.GroupLayout(optionmenu);
        optionmenu.setLayout(optionmenuLayout);
        optionmenuLayout.setHorizontalGroup(
            optionmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(optionmenuLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(optionmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 427, Short.MAX_VALUE)
                    .addGroup(optionmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        optionmenuLayout.setVerticalGroup(
            optionmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(optionmenuLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        jLabel3.setText("CD Nummer");

        jLabel4.setText("CD Titel");

        insertcdbutton.setText("CD Anlegen");
        insertcdbutton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                insertcdbuttonActionPerformed(evt);
            }
        });

        cdanlegeninfo.setEditable(false);

        javax.swing.GroupLayout cdanlegenmenuLayout = new javax.swing.GroupLayout(cdanlegenmenu);
        cdanlegenmenu.setLayout(cdanlegenmenuLayout);
        cdanlegenmenuLayout.setHorizontalGroup(
            cdanlegenmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(cdanlegenmenuLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(cdanlegenmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(cdanlegenmenuLayout.createSequentialGroup()
                        .addGroup(cdanlegenmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGap(18, 18, 18)
                        .addGroup(cdanlegenmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(cdtitelfield, javax.swing.GroupLayout.DEFAULT_SIZE, 364, Short.MAX_VALUE)
                            .addComponent(cdnummerfield, javax.swing.GroupLayout.DEFAULT_SIZE, 364, Short.MAX_VALUE)
                            .addComponent(cdanlegeninfo, javax.swing.GroupLayout.DEFAULT_SIZE, 364, Short.MAX_VALUE))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, cdanlegenmenuLayout.createSequentialGroup()
                        .addComponent(insertcdbutton, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(151, 151, 151))))
        );
        cdanlegenmenuLayout.setVerticalGroup(
            cdanlegenmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(cdanlegenmenuLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(cdanlegenmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(cdnummerfield, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(cdanlegenmenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(cdtitelfield, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(39, 39, 39)
                .addComponent(cdanlegeninfo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, Short.MAX_VALUE)
                .addComponent(insertcdbutton)
                .addGap(46, 46, 46))
        );

        jButton2.setLabel("CDs auslesen");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cdauslesen, javax.swing.GroupLayout.DEFAULT_SIZE, 560, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton2)
                .addGap(45, 45, 45)
                .addComponent(cdauslesen, javax.swing.GroupLayout.PREFERRED_SIZE, 268, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(106, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(mainmenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(optionmenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 58, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(cdanlegenmenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(mainmenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(optionmenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(cdanlegenmenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        try{
            con = DriverManager.getConnection("jdbc:derby:TestDB;create=true");
            this.jTextField1.setText("Verbindung zur Datenbank erfolgreich hergestellt.");
            con.close();
        } catch (Exception e) {
            this.jTextField1.setText("Exception: "+e.getMessage());
        }
    }

    private void optbuttonActionPerformed(java.awt.event.ActionEvent evt) {
        this.mainmenu.setVisible(false);
        this.optionmenu.setVisible(true);
    }

    private void optcdidxcrActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            con = DriverManager.getConnection("jdbc:derby:TestDB;create=true");

            Statement sta = con.createStatement();
            int count = sta.executeUpdate(
                    "CREATE TABLE "+cd+" (CD_ID INT GENERATED BY DEFAULT AS IDENTITY, CD_NR INT, CD_TITEL VARCHAR(100), CD_FACH INT)");
            this.jTextField1.setText("Table "+cd+" erfolgreich angelegt.");
            sta.close();

            con.close();
        } catch (Exception e) {
            this.jTextField1.setText("FEHLER: "+e.getMessage());
        }
    }

    private void optcdidxdropActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            con = DriverManager.getConnection("jdbc:derby:TestDB;create=true");

            Statement sta = con.createStatement();
            int count = sta.executeUpdate("DROP TABLE "+cd);

            this.jTextField1.setText("Table "+cd+" erfolgreich gelöscht.");
            sta.close();

            con.close();
        } catch (Exception e) {
            this.jTextField1.setText("FEHLER: "+e.getMessage());
        }
    }

    private void optcdtrcreateActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            con = DriverManager.getConnection("jdbc:derby:TestDB;create=true");

            Statement sta = con.createStatement();
            int count = sta.executeUpdate(
                    "CREATE TABLE "+tr+" (TR_ID INT GENERATED BY DEFAULT AS IDENTITY, TR_NR INT, TR_TITEL VARCHAR(100), TR_INTERPRET VARCHAR(100))");
            this.jTextField1.setText("Table "+tr+" erfolgreich angelegt.");
            sta.close();

            con.close();
        } catch (Exception e) {
            this.jTextField1.setText("FEHLER: "+e.getMessage());
        }
    }

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        this.mainmenu.setVisible(false);
        this.cdanlegenmenu.setVisible(true);
    }

    private void insertcdbuttonActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            String  cdnr = this.cdnummerfield.getText(),
                    cdti = this.cdtitelfield.getText();
            con = DriverManager.getConnection("jdbc:derby:TestDB;create=true");

            Statement sta = con.createStatement();

            int count = 0;
            int c = sta.executeUpdate("INSERT INTO "+cd+" (CD_NR, CD_TITEL) VALUES ("+cdnr+", '"+cdti+"')");
            count = count + c;

            this.cdanlegeninfo.setText(""+cdti+" erfolgreich hinzugefügt.");

            sta.close();

            con.close();
        } catch (Exception e) {
            this.cdanlegeninfo.setText("FEHLER: "+e.getMessage());
        }
    }

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            con = DriverManager.getConnection("jdbc:derby:TestDB;create=true");
            Statement sta = con.createStatement();

            ResultSet res = sta.executeQuery("SELECT * FROM "+cd);

            while (res.next()) {
                this.cdauslesen.setText("CD ID: "+res.getInt("CD_ID")+"\nCD Nummer: "+res.getInt("CD_NR")+"\nCD Titel: "+res.getString("CD_TITEL"));
            }
            res.close();

            sta.close();
            con.close();
        } catch (Exception e) {
            this.cdanlegeninfo.setText("FEHLER: "+e.getMessage());
        }
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JTextField cdanlegeninfo;
    private javax.swing.JPanel cdanlegenmenu;
    private javax.swing.JTextField cdauslesen;
    private javax.swing.JTextField cdnummerfield;
    private javax.swing.JTextField cdtitelfield;
    private javax.swing.JButton insertcdbutton;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JPanel mainmenu;
    private javax.swing.JButton optbutton;
    private javax.swing.JButton optcdidxcr;
    private javax.swing.JButton optcdidxdrop;
    private javax.swing.JButton optcdtrcreate;
    private javax.swing.JPanel optionmenu;
    // End of variables declaration

}
INSERT

Code: Alles auswählen

        try {
            String  cdnr = this.cdnummerfield.getText(),
                    cdti = this.cdtitelfield.getText();
            con = DriverManager.getConnection("jdbc:derby:TestDB;create=true");

            Statement sta = con.createStatement();

            int count = 0;
            int c = sta.executeUpdate("INSERT INTO "+cd+" (CD_NR, CD_TITEL) VALUES ("+cdnr+", '"+cdti+"')");
            count = count + c;

            this.cdanlegeninfo.setText(""+cdti+" erfolgreich hinzugefügt.");

            sta.close();

            con.close();
        } catch (Exception e) {
            this.cdanlegeninfo.setText("FEHLER: "+e.getMessage());
        }
SELECT

Code: Alles auswählen

        try {
            con = DriverManager.getConnection("jdbc:derby:TestDB;create=true");
            Statement sta = con.createStatement();

            ResultSet res = sta.executeQuery("SELECT * FROM "+cd);

            while (res.next()) {
                this.cdauslesen.setText("CD ID: "+res.getInt("CD_ID")+"\nCD Nummer: "+res.getInt("CD_NR")+"\nCD Titel: "+res.getString("CD_TITEL"));
            }
            res.close();

            sta.close();
            con.close();
        } catch (Exception e) {
            this.cdanlegeninfo.setText("FEHLER: "+e.getMessage());
        }
Ich habe das ganze erst mal so in/auf die Buttons geklatscht, da ich das ganze erst mal testen wollt.
Ich schaffe es auch einen Eintrag in die DB zu schreiben, jedoch scheint bei der Ausgabe was nicht ganz so zu funktionieren.
Drücke ich auf den CD anzeigen Button, gibt er mir lediglich den letzten Eintrag aus der DB wieder...
Ich weiß leider nicht ob er im INSERT Statement immer den letzten Eintrag überschreibt, anhand der CD_ID die dank "Auto_Increment" sich automatisch erhöht, denke ich also das es mehr als nur einen Eintrag in der DB geben muss (wenn ich vorher z.B. 5 CDs eingetragen habe).
Stimmt evtl. was mit dem INSERT oder SELECT nicht ?

Bend0r
Beiträge: 4
Registriert: 27.04.2011, 09:05

Re: Portable SQL in Netbeans

Beitrag von Bend0r » 01.05.2011, 12:23

Ok, scheint wohl etwas zu schwer zu sein für euch (Sorry).
Aber das man statt :

Code: Alles auswählen

try {
            con = DriverManager.getConnection("jdbc:derby:TestDB");
            Statement sta = con.createStatement();

            ResultSet res = sta.executeQuery("SELECT * FROM "+cd);

            while (res.next()) {
                this.cdauslesen.setText("CD ID: "+res.getInt("CD_ID")+"\nCD Nummer: "+res.getInt("CD_NR")+"\nCD Titel: "+res.getString("CD_TITEL"));
            }
            res.close();

            sta.close();
            con.close();
        } catch (Exception e) {
            this.cdanlegeninfo.setText("FEHLER: "+e.getMessage());

Code: Alles auswählen

StringBuilder cdInfo = new StringBuilder();
while (res.next()) {
    cdInfo.append("CD ID: " + res.getInt("CD_ID") + " CD NR: " + res.getInt("CD_NR") + " CD Titel: " + res.getString("CD_TITEL") + "\n");
}
cdauslesen.setText(cdInfo.toString());
schreiben kann/soll, hätte mir auch einer von euch sagen können (zumindest dachte ich das :/)

Benutzeravatar
smurfi
Site Admin
Beiträge: 1623
Registriert: 29.06.2006, 11:33
Wohnort: Wuppertal
Kontaktdaten:

Re: Portable SQL in Netbeans

Beitrag von smurfi » 01.05.2011, 12:42

Hallo,
Bend0r hat geschrieben:Ok, scheint wohl etwas zu schwer zu sein für euch (Sorry).
Aber das man statt :
Und das man hier einen freundlichen Umgangston erwartet ist dir wohl auch nicht nicht aufgefallen.
Wenn es für uns zu schwer ist brauchst du uns ja nicht oder?
Falls es dir noch nicht aufgefallen ist macht hier jeder freiwillig mit und es gibt noch nichtmal Werbebanner.

So das reicht dazu auch.

Gruß
Michael

Antworten