# Derby



## java_1985 (31. Aug 2009)

will ein Beispielprogramm ablaufen lassen welches eine Derby Datenbank an Java anbindet. Funktioniert leider nicht. Habe in der Umgebungsvariable die derby.jar Datei rein geschrieben. Funktioniert leider immer noch nicht bitte um Hilfe.

folgende Fehlermeldung taucht auf:


```
java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at DatabaseLab.main(DatabaseLab.java:17)
```


----------



## java_1985 (31. Aug 2009)

Kann mir da bitte jemand weiter helfen???


----------



## Guybrush Threepwood (31. Aug 2009)

Kannst Du mal ein Code-Beispiel zeigen, wo der Fehler auftritt? Ist derby.jar wirklich im Classpath?


----------



## java_1985 (31. Aug 2009)

Das Beispielcoding ist hier:


```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
 
/**
 * @author Tom
 */
public class DerbyEmbeddedDatabaseExample {
 
  /**
   * @param args
   */
  public static void main(String[] args) throws Exception {
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
    Properties properties = new Properties();
    properties.put("user", "user1");
    properties.put("password", "user1");
    Connection connection = DriverManager.getConnection("jdbc:derby:c:/TEMP/tutorialsDB;create=true", properties);
 
    createTableTestIfItDoesntExistYet(connection);
    populateTableTestIfItHasNotBeenPopulatedYet(connection);
    showContentsOfTableTest(connection);
   
    connection.close();
  }
 
  /**
   * @param connection
   * @throws SQLException
   */
  private static void showContentsOfTableTest(Connection connection) throws SQLException {
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery("SELECT * FROM test");
    int columnCnt = resultSet.getMetaData().getColumnCount();
    boolean shouldCreateTable = true;
    while (resultSet.next() && shouldCreateTable) {
      for(int i = 1; i <= columnCnt;i++){
        System.out.print(resultSet.getString(i) +  " ");
      }
      System.out.println();
    }
    resultSet.close();
    statement.close();
  }
 
  private static void populateTableTestIfItHasNotBeenPopulatedYet(Connection connection) throws Exception {
 
    boolean shouldPopulateTable = true;
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery("SELECT COUNT(*) FROM test");
    if (resultSet.next()) {
      shouldPopulateTable = resultSet.getInt(1) == 0;
    }
    resultSet.close();
    statement.close();
 
    if (shouldPopulateTable) {
      System.out.println("Populating Table test...");
      PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO test VALUES (?,?)");
      String[] data = { "AAA", "BBB", "CCC", "DDD", "EEE" };
      for (int i = 0; i < data.length; i++) {
        preparedStatement.setInt(1, i);
        preparedStatement.setString(2, data[i]);
        preparedStatement.execute();
      }
      preparedStatement.close();
    }
  }
 
 
  private static void createTableTestIfItDoesntExistYet(Connection connection) throws Exception {
    ResultSet resultSet = connection.getMetaData().getTables("%", "%", "%", new String[] { "TABLE" });
    int columnCnt = resultSet.getMetaData().getColumnCount();
    boolean shouldCreateTable = true;
    while (resultSet.next() && shouldCreateTable) {
      if (resultSet.getString("TABLE_NAME").equalsIgnoreCase("TEST")) {
        shouldCreateTable = false;
      }
    }
    resultSet.close();
    if (shouldCreateTable) {
      System.out.println("Creating Table test...");
      Statement statement = connection.createStatement();
      statement.execute("create table test (id int not null, data varchar(32))");
      statement.close();
    }
  }
}
```

ist es egal wo die derby.jar Datei ist???
In Umgebungsvariable habe ich als Systemvariable folgendes eingegeben:

C:\Programme\Java\jdk1.6.0_14\lib\derby.jar


----------



## ralfgc (31. Aug 2009)

Hallo,

ja es ist egal wo das jar liegt ABER die JVM muss wissen wo sie ist. die jar muss also
im classpath sein. Das kannst du bspw. mit dem Parameter "-cp"  erreichen,
welches du an das Kommando "java" beim Aufruf ranhängst. Hast du ein 
jar-file deines Programms erzeugt, kannst du dies dort im Manifest angeben. 

Und so in der Entwicklungsumgebung ist das nat. von Umgebung zu Umgebung
verschieden. Welche nutzt du denn? Eclipse?

mfG


----------



## java_1985 (31. Aug 2009)

Nein ich habe keine jar Datei erzeugt ich arbeite mit Eclipse bin noch ein Anfänger deswegen kenne ich mich nicht so aus wie hänge ich das denn an der Java Datei -cp???


----------



## java_1985 (31. Aug 2009)

Habs hingekriegt vielen lieben dank ralf ))


----------



## ralfgc (31. Aug 2009)

Hi,

unter Eclipse kannst du die lib folgendermaßen hinzufügen.
Rechte Maustaste auf dein Projekt -> Properties
dann links "Java Build Path" auswählen, in den Reiter "Libaries" gehen, 
und auf "Add Jars..." klicken und dann deine jar auswählen.

-cp ist ein Parameter für die JVM, also das Programm "java" was man auf der
Konsole eingeben kann (wenn das bin verzeichnis im PATH ist).
Mit dem Parameter kannst du libs in den Classpath setzen, so das er die 
Bibliothek bei der Programmausführung auch findet. bspw: java -cp ../mein.jar MeinProgramm

mfG


----------

