# Datenbankzugriff Intellij



## frager2345 (19. Jul 2022)

Hi, also ich verzweifle gerade  bei dem Datenbankzugriff.....
Ich habe erstmal diese Datei heruntergeladen (apache derby 10.16):
db-derby-10.16.1.1-lib.zip (link : https://db.apache.org/derby/releases/release-10_16_1_1.cgi)
Dann hab ich in Intellij über : File->Project Structure->Modules (hier auf dependencies gewechselt) -> + -> derbyrun      hinzugefügt:

Jetzt bin ich jedoch schon am Ende mit meinem Wissen, habe auch nichts hilfreiches im Internet gefunden ;(
Was muss ich noch machen, dass ich mit der Datenbank verbinden kann?
Ich bekomme bei den ganzen Befehlen diese Fehlermeldung: 

No data sources are configured to run this SQL and provide advanced code assistance. Disable this inspection via problem menu (Alt+Eingabe). 

Also habe ich dann im DataBase menü mal eine neue DataSource angelegt :



Wenn ich dann auf 'ok' clicke bekomm ich diese Fehlermeldung:

Hiermit will ich es testen:


```
import java.sql.*;

public class SQL {
    public static void main(String[] args) {
        Connection c = null;
        try{
            c = DriverManager.getConnection("jdbc:derby:derbyDB;create=true");
            String befehl =
                    " CREATE TABLE Vorlesung ("
                            + "username VARCHAR(50) ,"
                            + " passwort VARCHAR(32)) ";
            c.prepareStatement(befehl).execute();
            final ResultSet resultSet = c.prepareStatement("SELECT username, password FROM users").executeQuery();
            while (resultSet.next()) {
                final String username = resultSet.getString("username");
                final String password = resultSet.getString("password");
                System.out.printf("%s:%s\n", username, password);
            }
            resultSet.close();
            c.prepareStatement("DROP TABLE users").execute();

            }catch ( SQLException e ){
            System.err.println("Fehler bei DBS-Zugriff");
            e.getStackTrace();
        }finally {
            try{
                if(c != null){
                    c.close();
                }
            }catch ( SQLException e) {
                System.err.println("Fehler bei schließen des Streams");
                e.getStackTrace();
            }
        }
    }
}
```

Jedoch wirft er hier jedesmal eine Exeption
Gruß


----------



## mihe7 (20. Jul 2022)

frager2345 hat gesagt.:


> Wenn ich dann auf 'ok' clicke bekomm ich diese Fehlermeldung:


Völlig zurecht: Du hast keinen DB-Namen in der URL angegeben. Vergleiche `jdbc:derby:;create=true` in der IDE mit `jdbc:derby:derbyDB;create=true` im Code.

Allerdings solltest Du keine DataSource in IntelliJ anlegen müssen. Die DB legst Du ja im Code an. Diesbezüglich:


frager2345 hat gesagt.:


> Jedoch wirft er hier jedesmal eine Exeption


Bitte immer die genaue Exception, am besten den vollständigen Stacktrace angeben. 

Noch ein paar warme Worte zum Code: verwende try-with-resources, dann sparst Du Dir den hässlichen finally-Block. Außerdem kann man den Spaß schön in verschiedene Methoden aufteilen.

Und noch ein Hinweis: Du erzeugst eine Tabelle Vorlesung, versucht dann aber aus Tabelle users zu lesen...


----------



## frager2345 (20. Jul 2022)

mihe7 hat gesagt.:


> Völlig zurecht: Du hast keinen DB-Namen in der URL angegeben. Vergleiche `jdbc:derby:;create=true` in der IDE mit `jdbc:derby:derbyDB;create=true` im Code.


Hab ich geändert, jetzt gibt es mir diesen Fehlercode:



mihe7 hat gesagt.:


> Bitte immer die genaue Exception, am besten den vollständigen Stacktrace angeben.


Das Problem
 ist, dass ich keine stacktrace bekomme. Es wird einfach nur "Fehler bei DBS-Zugriff" geprintet in die err.


mihe7 hat gesagt.:


> Und noch ein Hinweis: Du erzeugst eine Tabelle Vorlesung, versucht dann aber aus Tabelle users zu lesen.


Ups, hab ich natürlich auch geändert.


----------



## mihe7 (20. Jul 2022)

Ändere Zeile 24 zu `e.printStackTrace();`


----------



## frager2345 (20. Jul 2022)

Wird trotzdem nichts geprintet.


----------



## mihe7 (20. Jul 2022)

Moment mal. Du rufst einfach nur das Programm oben auf und bekommst diese Ausgabe?


----------



## KonradN (20. Jul 2022)

Also wenn die Meldung innerhalb des catch blockes ausgegeben wird, dann sollte auch der Stacktrace ausgegeben werden, wenn Du es richtig geändert hast. Da bitte auch immer den geänderten Code noch einmal zeigen, damit man ggf. nach Fehlern schauen kann!

Ansonsten: Wenn Du die Datenbank sowohl innerhalb der IDE geöffnet hast und dir anschaust und du zugleich die Applikation starten willst: das kann schon den Fehler verursachen da ggf. die Datenbank geöffnet ist und nur ein Zugriff zu einer Zeit erlaubt ist.


----------



## frager2345 (20. Jul 2022)

mihe7 hat gesagt.:


> Moment mal. Du rufst einfach nur das Programm oben auf und bekommst diese Ausgabe?


ja genau.


----------



## frager2345 (20. Jul 2022)

Also hier einmal der jetzt geänderte Code:

```
public class SQL {
    public static void main(String[] args) {
        Connection c = null;
        try{
            c = DriverManager.getConnection("jdbc:derby:derbyDB;create=true");
            String befehl =
                    " CREATE TABLE Vorlesung ("
                            + "username VARCHAR(50) ,"
                            + " passwort VARCHAR(32)) ";
            c.prepareStatement(befehl).execute();
            final ResultSet resultSet = c.prepareStatement("SELECT username, password FROM Vorlesung").executeQuery();
            while (resultSet.next()) {
                final String username = resultSet.getString("username");
                final String password = resultSet.getString("password");
                System.out.printf("%s:%s\n", username, password);
            }
            resultSet.close();
            c.prepareStatement("DROP TABLE Vorlesung").execute();

            }catch ( SQLException e ){
            //System.err.println("Fehler bei DBS-Zugriff");
            e.getStackTrace();
        }finally {
            try{
                if(c != null){
                    c.close();
                }
            }catch ( SQLException e) {
                System.err.println("Fehler bei schließen des Streams");
                e.getStackTrace();
            }
        }
    }
}
```
Das ist die Ausgabe:

Also ich seh auch das die Datenbank gar nicht verbudnen ist:


----------



## LimDul (20. Jul 2022)

Läuft doch durch das Program. Das failed to start ist vom db-connection von intellij, nicht von deinem Programm.

Das was du da bzgl. der db in intellij siehst, hat nichts mit der DB-Connection von deinem Programm zu tun, das ist komplett außerhalb


----------



## KonradN (20. Jul 2022)

Nur noch einmal als Ergänzung:


frager2345 hat gesagt.:


> e.getStackTrace();


Aber das ist immer noch drin. Damit bekommst Du keine Ausgabe. Und in #4 hast Du den entsprechenden Hinweis schon bekommen:


mihe7 hat gesagt.:


> Ändere Zeile 24 zu `e.printStackTrace();`


----------

