Datenbankverbindung kann nicht hergestellt werden

Rawan

Mitglied
Hallo,
ich habe folgendes Problem:
Ich möchte in meiner H2-Datenbank eine Tabelle "Student" erstellen, jedoch wird meine Datenbank nicht verbunden..Im Quellcode werden keine Fehler angezeigt, jedoch kommt die Fehlermeldung, dass keine Verbindung zur Datenbank hergestellt werden kann. Wenn ich mich über den Browser mit der Datenbank manuell verbinde, dann erscheint keine Tabelle in der Datenbank.
Ich habe auch die jar-Datei für die h2 in meinen build path von eclipse eingebunden.
Kann mir jemand helfen und sagen, was mein Fehler ist?
Hier ist mein Quellcode:

Java:
import java.sql.Connection;
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement;


public class Database {

	/**
	 * @param args
	 */
	public static void main(String[] args)  throws Exception {
		Connection conn = null;		

		try { 

		Class.forName("org.h2.Driver").newInstance(); 

		conn = DriverManager.getConnection( 
				"jdbc:h2:~/Softwaretechnik", "", ""); 
		
		// create our java jdbc statement
		Statement stmt = conn.createStatement();
		
		
		// create table "Student"
		String createQ = "CREATE TABLE student(firstname VARCHAR(30)," +
				"lastname VARCHAR(30), matriculationNumber VARCHAR(14) PRIMARY KEY, " +
				"email VARCHAR(255), title CHAR(4), degree_course VARCHAR(255), " +
				"date_and_timeOfRegistration VARCHAR(255)"; 
		stmt.executeUpdate(createQ); 
		

        // insert data to the table "student"
		String insertQ = "INSERT INTO student (firstname, lastname, matriculationNumber," +
				"email, title, degree_course, date_and_timeOfRegistration)" +
		"VALUES ('', '','','','','','')";
		stmt.executeUpdate(insertQ);
		
		
/**	   ResultSet rs = stmt.executeQuery("SELECT * FROM student");
		while (rs.next()) { 
			System.out.println(rs.getString(1)+ " "+ rs.getString(2)+ " " + rs.getString(3)+ " " +
		rs.getString(4) + " " + rs.getString(5) + " " + rs.getString(6) + " " + rs.getString(7) + " " );
		}
*/
		
		
		stmt.close();
	//	rs.close();
		conn.close(); 
		
		}catch(SQLException e){
			System.err.println("Keine Verbindung zur Datenbank möglich");
			System.err.println("Fehlercode: " + e.getErrorCode());
		}	
	}
}
 
Zuletzt bearbeitet:

turtle

Top Contributor
Also, bei mir geht das Connecten problemlos.

Du weisst schon das die Datenbank im Home-Verzeichnis erzeugt wird ? (bei mir C:\Users\testuser\Softwaretechnik.h2.db).

Aber das SQL-Statement funzt nicht, denn da fehlt wohl ein ")" am Ende.

Ich nehme immer squirrel, um SQL-Befehle auszuprobieren, bevor ich sie in Code "schweisse".
 

Rawan

Mitglied
Also, bei mir geht das Connecten problemlos.

Du weisst schon das die Datenbank im Home-Verzeichnis erzeugt wird ? (bei mir C:\Users\testuser\Softwaretechnik.h2.db).

Aber das SQL-Statement funzt nicht, denn da fehlt wohl ein ")" am Ende.

Ich nehme immer squirrel, um SQL-Befehle auszuprobieren, bevor ich sie in Code "schweisse".



Ja ich weiß, dass die Datenbank im home-Verzeichnis erzeugt wird. Bei mir wird eine .trace und .h2 Datei erstellt, aber keine .lock :/
Ich weiß nicht, was ich falsch gemacht habe..

Wie verwendet man squirrel?
 

turtle

Top Contributor
Wie verwendet man squirrel?
Hier ganz kurz ein paar Sätze.
Natürlcih downloaden und squirrel-sql.bat starten
Dann
  • Driver konfigurieren
    H2 Unter ExtraClasspath den jdbc-Treiber von h2 hinzufügen
  • Alias einrichten
    Dieser neue Alias verwendet h2 Treiber
    Du gibst die URL jdbc... an, die du schon kennst.
    Connect sollte funktionieren.
    Im Dateisystem kannst du prüfen, das Datenbank erzeugt wurd.
  • in Squirrel auf die SQL-Seite gehen
    create table-Statement eingeben und laufen lassen
    Im Dateisystem kannst du prüfen, das lock-Datei angelegt wirrd
 

Rawan

Mitglied
Also, bei mir geht das Connecten problemlos.

Du weisst schon das die Datenbank im Home-Verzeichnis erzeugt wird ? (bei mir C:\Users\testuser\Softwaretechnik.h2.db).

Aber das SQL-Statement funzt nicht, denn da fehlt wohl ein ")" am Ende.

Ich nehme immer squirrel, um SQL-Befehle auszuprobieren, bevor ich sie in Code "schweisse".


Also, bei mir geht das Connecten problemlos.

Du weisst schon das die Datenbank im Home-Verzeichnis erzeugt wird ? (bei mir C:\Users\testuser\Softwaretechnik.h2.db).

Aber das SQL-Statement funzt nicht, denn da fehlt wohl ein ")" am Ende.

Ich nehme immer squirrel, um SQL-Befehle auszuprobieren, bevor ich sie in Code "schweisse".



Ja ich weiß, dass die Datenbank im home-Verzeichnis erzeugt wird. Bei mir wird eine .trace und .h2 Datei erstellt, aber keine .lock :/
Ich weiß nicht, was ich falsch gemacht habe..
Danke trotzdem :) Ich werde es nochmal versuchen.

Kann mir jemand vielleicht sagen, ob ich in die GUI SQL-Befehle benutzen darf? Ich meine, wenn ich z.B. den vom Benutzer eingegebenen Text aus Textfelder einlesen möchte und diese dann gleich in die Datenbank speichern möchte. Benötige ich hierfür SQL-Befehle in der GUI (oder muss ich in der Datenbank die Methoden mit den SQL-Befehlen implementieren/erzeugen)? Und wenn ja, kann mir vielleicht jemand ein Beispiel machen, wie ich das realisiere?
Also kann ich das einfach als ActionListener für die Textfelder machen und darin einfach einen Scanner einbauen und anschließend noch den SQL-Befehl zum speichern des eingelesenen Textes? Oder wie funktioniert das?

Meine Idee wäre folgende:

Java:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
import javax.swing.JLabel;

// z.B. ich habe ein Textfeld, in dem eine Matrikelnummer eingelesen werden soll
fieldMatrikelnr.setText("");
fieldMatrikelnr.setBounds(50, 340, 180, 20);
add(fieldMatrikelnr);
fieldMatrikelnr.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
              // hier den Scanner 
                try {
                     Scanner input = new Scanner(System.in);
                     while (input.hasNext()) {
                         System.out.println(input.next());
                   }
               } catch (FileNotFoundException e) {
                 System.out.println("Fehler");
                 e.printStackTrace();
              }

	//und SQL-Befehle: Einfügen der eingelesenen Matrikelnummer in die DB-Tabelle "Student"
              Class.forName("org.h2.Driver"); 

		conn = DriverManager.getConnection( 
				"jdbc:h2:~/Softwaretechnik", "", ""); 
		
              Statement stmt = conn.createStatement();
              stmt.executeUpdate("INSERT INTO student(Matrikelnummer) VALUES(input.next())"); //oder rufe ich hier anstatt von "input.next())" eine Methode auf, die den Scanner enthält?			
          }
});

Ich weiß meine Idee ist nicht ganz richtig, aber kann mir vielleicht jemand erklären, wie ich es anstatt von meinem Code realisieren könnte?
Ich weiß, dass ich den Treiber (h2) nicht in der GUI aufrufen soll, weil dies ja in das Paket für die Datenbank gehört, aber ich verstehe nicht, wie das mit dem Einlesen eines Textfeldes der GUI und das Speichern dieses eingelesenen Texts in die Datenbank, funktionieren sollte.
Kann mir jemand helfen?
Wäre über jede Hilfe dankbar :)


P.S: Mein Post davor gilt nicht mehr (einfach ignorieren ;) )..Leider kann ich diesen nicht löschen.. :/
 

Rawan

Mitglied
Hier ganz kurz ein paar Sätze.
Natürlcih downloaden und squirrel-sql.bat starten
Dann
  • Driver konfigurieren
    H2 Unter ExtraClasspath den jdbc-Treiber von h2 hinzufügen
  • Alias einrichten
    Dieser neue Alias verwendet h2 Treiber
    Du gibst die URL jdbc... an, die du schon kennst.
    Connect sollte funktionieren.
    Im Dateisystem kannst du prüfen, das Datenbank erzeugt wurd.
  • in Squirrel auf die SQL-Seite gehen
    create table-Statement eingeben und laufen lassen
    Im Dateisystem kannst du prüfen, das lock-Datei angelegt wirrd


Danke..

Hast du meine Klasse "Database" aber auch in eclipse (oder was auch immer du verwendest) ausgeführt?
Öffnet sich dann von eclipse aus deine Datenbank (also die H2-Konsole) (bei Verwendung meiner Klasse "Database")?
Wird meine Tablle "Student" in der Datenbank bei dir erzeugt (Kannst du sie sehen?)?
 
Zuletzt bearbeitet:

turtle

Top Contributor
aus Textfelder einlesen möchte und diese dann gleich in die Datenbank speichern möchte
Davon rate ich DRINGEND davon ab.:bloed:

Dieses Problem nennt sich SQL-Injection und bedeutet das ein Benutzer ein Kommando sendet, was böse DInge tut (beispiel "select * from user; drop table user;")

Dies vermeidet man, indem man in Java Prepared-Statements einsetzt. Praktisch alle machen das so. Einige Hobbyprogrammier basteln sich SQL-Befehl via Strings zusammen. Pfui:shock:
Benötige ich hierfür SQL-Befehle in der GUI
Ebenfalls rate ich DRINGEND davon ab.:bloed:

Eine GUI sollte nichts mit SQL zu tun haben. Das zeugt von extrem schlechter Trennung von View(GUI) und Backend (Datenbank).
 

Rawan

Mitglied
Ok, danke für deine Meinung :)
Aber könntest du mir Schritt für Schritt erklären, wie ich das Einlesen eines Textfeldes und anschließendem Speichern in die Datenbank des eingelesenen Textes sonst realisieren könnte? Geht das Einlesen nicht mit Hilfe von ActionListener (in dem der Scanner dann in der actionPerformed() drin ist..so wie ich es im Beispiel gemacht habe) ?
Am besten an einem Beispiel..Wäre nett...
Vielleicht könntest du mein Textfeld für die Matrikelnummer verwenden und anhand von diesem das komplette Beispiel zeigen?
 
Zuletzt bearbeitet:

turtle

Top Contributor
Nein, ich kann nicht die "ganze" Arbeit für dich tun;)

Ich kann dir als Hinweis geben, das man Software häufig in 3 Schichten (Layer) aufbaut. Als "oberster" Layer ist hier die GUI zu nennen. Als zweiter Layer ist die Business-Logik. Und der dritte Layer ist Backend, also Datenzugriff mit Datenbank. Normalerweise sollte ein Layer nur mit dem nächst tieferen kommunizieren.

Bei vielen Systemen sind die verschieden Layer auch auf verschiedenen Rechner eingerichtet. GUI zum Beispiel im Browser, Business-Logik im Application-Server und Backend auf Datenbank-Cluster.

Zwar stimmt es, das du in einer Swing-GUI ein JTextField oder JButton hast. Natürlich hast du dann auch eine Action, die sich darum kümmert "etwas" zu tun.

Nichts spricht aber dagegen ein weiteres Objekt (aus Business-Ebene) zu erzeugen oder anzusprechen, dieses "Etwas" zu tun. Die Businesslogik spricht daraufhin mit der Datenbank und liefert das Ergebnis an die Businesslogik und die dann im Endeffekt an die GUI.

Der Vorteil dieses Aufbaus ist unter anderem eine lose Kopplung zwischen den Objekten, So solltest du beispielsweise die DB gegen eine andere tauschen können und Änderungen sind definitiv nicht in der GUI zu machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Datenbankverbindung Oracle DB klappt nicht - getConnection returned null Datenbankprogrammierung 8
T Datenbankverbindung access funtioniert nicht Datenbankprogrammierung 21
C [MSSQL] Datenbankverbindung will nicht klappen... Datenbankprogrammierung 2
B Datenbankverbindung kann nicht aufgebaut werden. Datenbankprogrammierung 2
H Datenbankverbindung zu MS Access Datenbankprogrammierung 4
Zrebna Wie mittels PL/SQL eine Datenbankverbindung blockieren? Datenbankprogrammierung 6
B Probleme mit Datenbankverbindung Datenbankprogrammierung 2
J Jar-Datei stellt keine Datenbankverbindung her Datenbankprogrammierung 3
B SQLite Frage zu SQLite Datenbankverbindung Datenbankprogrammierung 7
Danloc Informationen für Datenbankverbindung wo/wie speichern? Datenbankprogrammierung 11
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
M Datenbankverbindung mit JSP herstellen Datenbankprogrammierung 19
D Keine Datenbankverbindung Datenbankprogrammierung 4
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
B Datenbankverbindung herstellen Datenbankprogrammierung 6
I SELECT bei Datenbankverbindung Datenbankprogrammierung 6
E Zuverlässige Datenbankverbindung Datenbankprogrammierung 4
B SQLite Java Login + Datenbankverbindung Datenbankprogrammierung 4
M Datenbankverbindung Access Datenbankprogrammierung 3
eskimo328 Datenbankverbindung ohne Passwort im Quelltext bei einer offline Anwendung Datenbankprogrammierung 14
Kenan89 Keine Datenbankverbindung möglich Datenbankprogrammierung 52
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
M Datenbankverbindung zu langsam beim Insert? Datenbankprogrammierung 6
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
N Allg. Frage zur Datenbankverbindung Datenbankprogrammierung 2
Hartigan Datenbankverbindung automatisch aktualisieren Datenbankprogrammierung 3
C MySQL Keine Datenbankverbindung Datenbankprogrammierung 6
D MySQL Datenbankverbindung scheitert Datenbankprogrammierung 9
A Datenbankverbindung mit einer Datenbank auf einem Webspace Datenbankprogrammierung 10
G Wie sieht eine Datenbankverbindung mit jndi aus? Datenbankprogrammierung 3
D Sicherheit für Datenbankverbindung Datenbankprogrammierung 19
MQue MySQL DatenbankVerbindung Datenbankprogrammierung 3
M Aus einem Applet eine Datenbankverbindung starten? Datenbankprogrammierung 26
G Datenbankverbindung mit Proxool aufrecht erhalten Datenbankprogrammierung 4
G iBatis Datenbankverbindung - DB-User übergeben Datenbankprogrammierung 4
J Warum ist es aufwendig eine Datenbankverbindung herzustellen Datenbankprogrammierung 3
E Datenbankverbindung verwalten Datenbankprogrammierung 6
J Fehler bei Oracle-Datenbankverbindung Datenbankprogrammierung 2
E Datenbankverbindung Java MySQL Exception Datenbankprogrammierung 10
K Datenbankverbindung zu MySQL in XAMPP Datenbankprogrammierung 11
M Dauerhafte Datenbankverbindung - Timeouts? Datenbankprogrammierung 4
timomeinen [Hibernate] Datenbankverbindung testen Datenbankprogrammierung 11
M Datenbankverbindung bricht nach ca. 12 Stunden Verbindung ab Datenbankprogrammierung 3
K Wann schließt ihr die Datenbankverbindung? Datenbankprogrammierung 7
E Datenbankverbindung von BIRT Datenbankprogrammierung 3
S Datenbankverbindung auslagen Datenbankprogrammierung 3
8 MySQL Datenbankverbindung herstellen FAQ Datenbankprogrammierung 2
A Was passiert wenn eine Datenbankverbindung unterbricht Datenbankprogrammierung 7
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
P Reicht finally nicht um DB connections zu schließen in (altem) Java? Datenbankprogrammierung 4
D JOIN COLUMN wird nicht genommen Datenbankprogrammierung 2
Maxim6394 JPA / EclipseLink - n:m Beziehung wird nicht aktualisiert Datenbankprogrammierung 0
J SQLite Abfrage fehlerhaft - komme nicht weiter - please help. Datenbankprogrammierung 3
D Ich möchte dass ich nachdem man den Kommentar geschrieben hat den Kommentar in den Tabelle Bestellübersicht geschbeichert wird klappt nicht bei mir Datenbankprogrammierung 2
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
A Java DB Server lässt sich nicht starten Datenbankprogrammierung 3
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
T Datenzeilen werden nicht gelöscht Datenbankprogrammierung 6
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
pkm PostgreSQL Kann mit mybatis einen Parameter für eine postgreSQL-Abfrage nicht übergeben. Datenbankprogrammierung 5
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
Watsoon Treiber wird in Intellij nicht geladen Datenbankprogrammierung 2
Kirby.exe PreparedStatement wird nicht ausgeführt Datenbankprogrammierung 5
rafi072001 MicroServices EurekaClient findet anderern EurekaClient nicht Datenbankprogrammierung 1
D JPA gleiche methode funktioniert an einer Stelle, an der anderen nicht Datenbankprogrammierung 3
Z Datenbank Choicebox wird nicht befüllt Datenbankprogrammierung 15
pkm PostgreSQL Auf eine Spalte kann aus einem Teil der SQL-Aussage nicht zugegriffen werden Datenbankprogrammierung 3
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
C MySQL SQL Statement wir nicht ausgeführt Datenbankprogrammierung 11
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
pkm Tomcat Classloader findet bei JPA-Persistierung die Persistence Unit nicht. Datenbankprogrammierung 11
F Tabellen automatisch erstellen wenn sie nicht existieren Datenbankprogrammierung 6
J Netbeans 11 und Eclipse JPA 2.5 Entity wird nicht gefunden Datenbankprogrammierung 4
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
J Firebase KeepSynced funktioniert nicht Datenbankprogrammierung 0
OnDemand MySQL Trigger löst nicht aus bei Hibernate Update Datenbankprogrammierung 12
R HSQLDB ResultSet update aktualisiert DB, aber nicht das ResultSet Datenbankprogrammierung 2
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
B MySQL Data Tools Plattform - "Database Connections" findet den Treiber nicht Datenbankprogrammierung 1
OnDemand One to Many bekomm es nicht hin Datenbankprogrammierung 7
L SQL-Statement INSERT INTO ON DUPLICATE KEY UPDATE funktioniert nicht Datenbankprogrammierung 5
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
F H2 ObjectOptimisticLockingFailureException wird nicht geworfen Datenbankprogrammierung 0
R findet Derby.DB nicht !? Datenbankprogrammierung 5
X SQLite SQLite Programm beendet/führt nicht weiter aus Datenbankprogrammierung 12
P LDAP: Daten eintragen funktioniert nicht Datenbankprogrammierung 7
Ananaskirsche Datenbanktreiber kann nicht geladen werden Datenbankprogrammierung 2
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
U Kann die Tabellen nicht finden Datenbankprogrammierung 0
M Java Datenbankanbindung funktioniert nicht Datenbankprogrammierung 4
C MYSQL kann wert nicht eintragen Datenbankprogrammierung 3
J Verbindung zu Derby Datenbank funktioniert nicht Datenbankprogrammierung 14
S MySQL MySQL will einfach nicht, bitte um Rat Datenbankprogrammierung 4
E Warum funktioniert das Erzeugen einer View nicht? Datenbankprogrammierung 1
E Warum kann mein SQL-File nicht in DB2 ausgeführt werden? Datenbankprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben