# Netbeans und JavaDB



## heidiweber (17. Jan 2009)

Hallo,

ich benötige in einem Netbeans-GUI-Projekt eine Datenbank. In Netbeans ist ja die JavaDB bereits standardmäßig vorhanden. Ich habe eine neue Datenbank mit Tabellen und unterschiedlichen Einträgen angelegt - war ja kein Problem.

Jetzt steht als Datenbank-String in Netbeans unter Services:
jdbc:derby://localhost:1527/testDB

Nun versuch ich eine Connection zur DB herzustellen:


```
Connection conn = null;

    String driver = "org.apache.derby.jdbc.EmbeddedDriver";
    String connectionURL = "jdbc:derby://localhost:1527/testDB;create=true";
    String createString = "CREATE TABLE Employee (NAME VARCHAR(32) NOT NULL, ADDRESS VARCHAR(50) NOT NULL)";
    try {
      Class.forName(driver);
    } catch (java.lang.ClassNotFoundException e) {
      e.printStackTrace();
    }
    try {
      conn = DriverManager.getConnection(connectionURL);
      Statement stmt = conn.createStatement();
      stmt.executeUpdate(createString);

      PreparedStatement psInsert = conn.prepareStatement("insert into Employee values (?,?)");

//      psInsert.setString(1, args[0]);
//      psInsert.setString(2, args[1]);

      psInsert.executeUpdate();

      Statement stmt2 = conn.createStatement();
      ResultSet rs = stmt2.executeQuery("select * from Employee");
      int num = 0;
      while (rs.next()) {
        System.out.println(++num + ": Name: " + rs.getString(1) + "\n Address" + rs.getString(2));
      }
      rs.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
```

Aber es kommt als Fehlermeldung:


```
java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
```

Kann mir da jemand bitte weiterhelfen? Muss da noch was eingebunden werden?

Vielen Dank
Grüße
Heidi


----------



## Zed (18. Jan 2009)

http://db.apache.org/derby/

das muss eingebunden werden


----------



## heidiweber (18. Jan 2009)

Guten Taq,

habs endlich hinbekommen. Es mussten natürlich noch die verschiedenen Derby.jars eingebunden werden.

Was ich aber nicht verstehe:
Um die Datenbank nutzen zu können, muss ich in Netbeans unter Services auf den DB-String connect klicken.
Erst dann funktioniert die Verbindung.

Da dies ein Swing-GUI-Programm wird, möchte ich das Programm später weitergeben und auf anderen Rechnern nutzen. Ich habe dies bereits versucht - die Derby.jar Dateien werden mitgepackt. Aber wie, wo spreche ich die Datenbank selbst an? Muss die gestartet werden (so wie innerhalb in Netbeans - denke mal doch nicht?)

Ich habe bei mir im Projektordner in einem Unterordner die Datenbank und versuche die so anzusprechen (was eigentlich gehen sollte) - aber es kommt als Fehlermeldung:


```
java.sql.SQLException: Failed to start database '/DerbyDb/myDB', see the next exception for details.
```

So versuche ich die aufzurufen:


```
String driver = "org.apache.derby.jdbc.EmbeddedDriver";
        String dbName = "/DerbyDb/myDB";
        String connectionURL = "jdbc:derby:" + dbName;
        Connection conn = null;

        try {
            Class.forName(driver);
        } catch (java.lang.ClassNotFoundException e) {
            jTextArea2.setText(e.toString());

        }

        try {
            conn = DriverManager.getConnection(connectionURL, "george", "sorosch");
            Statement stmt = conn.createStatement();

            ResultSet rst = stmt.executeQuery(query);
```

Ohhh - das kann doch nicht so schwer sein??
Wie muss man das machen - auch v.a. wie verpacke ich die Datenbank wenn ich die mit weitergeben möchte.
Oder geht das mit Derby nicht?

Vielen Dank
Grüße
Heidi


----------



## Zed (18. Jan 2009)

Kannst ja mal Testen ob das funktioniert,

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class HelloDerby {
    
    static final String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
    static final String URL = "jdbc:derby:derbydb;create=true";
    static final String CREATE_TABLE = "create table hello( world varchar(100))";
    static final String DROP_TABLE = "drop table hello";
    static final String INSERT = "insert into hello values (Hello World)";
    static final String SELECT = "select * from hello";
    
    public static void main(String[] args)  {
        
        try {
            Class.forName(DRIVER).newInstance();
            Connection connection = DriverManager.getConnection(URL);
            Statement statement = connection.createStatement();
            ResultSet resultSet = null;
            
            statement.execute(CREATE_TABLE);
            statement.execute(INSERT);
            resultSet = statement.executeQuery(SELECT);
            while(resultSet.next()) {
                System.out.println(resultSet.getString(1));
            }
            resultSet.close();
            statement.execute(DROP_TABLE);
            
            statement.close();
            
        } catch( Exception ex ) {
            ex.printStackTrace();
        }
        
    }
}
```

Hast du die DB mit create=true erstellt?


----------



## heidiweber (19. Jan 2009)

Hallo,

vielen Dank schon mal. Immerhin ein erster kleiner Schritt.

Lege ich eine Datenbank mit create=true an, die es noch nicht gibt, funktionierts:


```
String dbName = "/DerbyDb/habsCreated;create=true";
```

Dann wird im "root-Ordner" des Projekts im Unterordner "DerbyDb/" ein neuer Ordner "habsCreated" mit der Datenbank angelegt. 

Die Datenbankverbindung funktioniert.

Lege ich aber eine Datenbank über Netbeans an (unter "Services") und versuche die Datenbank abzusprechen, kommt als Fehlermeldung:


```
Failed to start database '/DerbyDb/habsCreated', see the next exception for details.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at desktopapplication2.DesktopApplication2View.jButton3ActionPerformed(DesktopApplication2View.java:403)
        at desktopapplication2.DesktopApplication2View.access$1000(DesktopApplication2View.java:30)
        at desktopapplication2.DesktopApplication2View$6.actionPerformed(DesktopApplication2View.java:163)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6134)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5899)
        at java.awt.Container.processEvent(Container.java:2023)
        at java.awt.Component.dispatchEventImpl(Component.java:4501)
        at java.awt.Container.dispatchEventImpl(Container.java:2081)
        at java.awt.Component.dispatchEvent(Component.java:4331)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4299)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3963)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3893)
        at java.awt.Container.dispatchEventImpl(Container.java:2067)
        at java.awt.Window.dispatchEventImpl(Window.java:2458)
        at java.awt.Component.dispatchEvent(Component.java:4331)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:284)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
debug:
BUILD SUCCESSFUL (total time: 11 seconds)
```

So rufe ich die auf:


```
String dbName = "/DerbyDb/habsCreated;create=true";
```

Habs auch ohne create=true probiert. Es wurde auch der Ordner "habsCreated" angelegt - sind auch Dateien/Ordner drinnen - es ist also auch der Ordner.

Was ist da falsch? Wieso kann ich die durch Netbeans angelegte Datenbank nicht ansprechen?

Legt man in Netbeans die Datenbank an, kann man einen User + Passwort vergeben. Kann man dies auch mit angeben, wenn man "ohne Netbeans" die DB anlegt?

Vielen Dank
Grüße
Heidi


----------



## Zed (20. Jan 2009)

Hier mal bissel lesestoff

http://db.apache.org/derby/manuals/index.html#docs_10.4


http://www.tutorials.de/forum/java/268066-kleines-beispiel-zur-verwendung-der-derby-db-java-6-a.html

Einafach mal bissel googlen das kann jeder. 

Zu deinem Netbeans prob. Kann dir da nicht weiter helfen weil ich Netbeas abartig grottig finde und nur Eclipse nutze. 


PS. Wenn du Derby von Apache runterlädst gibt es dort eine Menge Codebeispiele im Archiv


----------



## heidiweber (21. Jan 2009)

Danke dir vielmals,

prinzipiell gehts jetzt - aber leider imemr noch nicht 100%ig so wie ich möchte - es fehlt auch Derby-Wissen.

Lese mich gerade in Derby ein - werde mich aber bestimmt nochmals melden

Wünsche dir noch einen schönen Tag
Grüße
Heidi


----------



## Ariol (21. Jan 2009)

Hatte da mal was für Derby gebastelt...vielleicht hilfts dir ja weiter:
http://java-forum.org/de/topic81299_netbeans-javadb.html

(Unten, wird ein Teil nochmal aktualisiert)


----------



## heidiweber (21. Jan 2009)

Hallo,

kann es sein, dass der Link von dor falsch ist? Es wird wieder auf dieses Posting weitergeleitet

Merci
Grüße
Heidi


----------



## Ariol (21. Jan 2009)

Sorry,

http://www.java-forum.org/de/viewtopic.php?t=64174&highlight=derby


----------



## heidiweber (21. Jan 2009)

Vielen lieben Dank Ario für "deinen" Link.

Werde ich mir auf jedenfall mal genauer anschauen Bin gespannt obs dann geht...

Wünsche dir noch einen schönen Abend.
Grüße
Heidi


----------



## Ariol (21. Jan 2009)

Ich weiß nicht ob das dein Problem genau trifft, aber evtl. hilfts dir etwas weiter.


----------

