Java und HSQL verbindung herstellen

Status
Nicht offen für weitere Antworten.

peterdacn

Mitglied
Hallo liebe Gemeinde, ich habe ein großes Problem undzwar bekomme ich es nicht hin, dass sich mein Java Programm mit der Datenbank von HSQL verbindet.

Hier der Quellcode den ich geschrieben habe:


Java:
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;






public class Verbindung_hsql {

  public static void main(String[] args){


      try
      {
        Class.forName( "org.hsqldb.jdbcDriver" );
    }
    catch ( ClassNotFoundException e )
    {
      System.err.println( "Keine Treiber-Klasse!" );
      return;
    }

    Connection con = null;


try {
    con =
DriverManager.getConnection("jdbc:hsqldb:file:C:/Dokumente und Einstellungen/name.name/Desktop/hsqldb_1_8_1_1/hsqldb/xdb;shutdown=true",

                                                                          "SA", "");
                                                                          

Statement stmt = con.createStatement();

        stmt.executeUpdate( "INSERT INTO CUSTOMER VALUES(50,'Felix','Kuhr','Immengarten 6','Hannover')" );

      ResultSet rs = stmt.executeQuery( "SELECT * FROM CUSTOMER " );

      while ( rs.next() )
        System.out.printf( "%s, %s %s%n", rs.getString(1),
                           rs.getString(2), rs.getString(3) );

      rs.close();

      stmt.close();
    }
    catch ( SQLException e )
    {
      e.printStackTrace();
    }
    finally
    {
      if ( con != null )
        try { con.close(); } catch ( SQLException e ) { e.printStackTrace(); }
    }
  }
}



Fehler ist folgender:

Mir kommt vor als könnte ich garnicht auf die Datenbank so zugreifen. Ich kann nichts hinzufügen in die Datenbank, oder auslesen.

Meine Gundsätzliche Frage lautet erstmal: Baut mein Javaprogramm überhaupt so eine Verbindung auf?

vielen Dank im Vorraus
 

Atze

Top Contributor
ist con in zeile 34 denn null?
bekommst du in 39 eine nullpointer?

kannst es auch mal mit
Java:
Class.forName("org.hsqldb.jdbcDriver").newInstance();
versuchen

bist du denn sicher, dass du den richtigen pfad zur db hast?

müsste da statt "...file:C:/...." nicht nen host angegeben werden? zb

Java:
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "sa", "");
 
Zuletzt bearbeitet:

peterdacn

Mitglied
Hallo Atze, vielen Dank ersteinmal für die schnell Antwort.

Er zeigt mir keine Fehler auf Grund eines Nullpointers.

Die Datenbank wird ja erstellt, wenn sie noch nicht existiert sobald ich den HSQL Server starte. Und er erstellt bei mir auch mehrere Dateien. Sind welche mit der Endung .lck dabei. Ist hier schon ein Fehler oder ist das noch alles im grünen Bereich?



Ich habe eine Fehlermeldung, die könnte vllt helfen dabei zu sagen, ob grundsätzlich ersteinmal eine Verbindung zu einer Datenbank aufgebaut wird.

Der Server startet ansich sauber (siehe starte_server.png). Die Fehlermeldung sollte mir eigentlich sagen, dass etwas in meinem SQL Befehl falsch ist. Nur existiert die Datenbank erst seit dem Serverstart..

Hast vllt. dazu auch ne Ahnung?
 
Zuletzt bearbeitet:

Atze

Top Contributor
hab mit hsqldb keinerlei erfahrung, aber der erste screen sieht so aus, als ob du versuchts was zu erstellen, was schon existiert (object name). aus dem zweiten werde ich auf den ersten blick nicht so wirklich schlau, sorry. vielleicht hat da jemand mehr ahnung von
 

peterdacn

Mitglied
ja, genau so sieht das für mich auch aus. Allerdings habe ich gerade erst die Datenbank erstellt.
Muss ich drauf hoffen, dass mir jemand das mal genauer deuten kann. Vielen Dank trotzdem dir schonmal.
 

velaluka

Aktives Mitglied
Hallo peterdacn,
also du bist mit der DB verbunden und legst eine Tabelle (Customer)an, die es schon gibt für den User SA. Wann legst du die Tabellen denn an? Eventuell kannst du das CREATE Statement um ein IF NOT EXIST erweitern.
Ciao velaluka
 

peterdacn

Mitglied
Das freut mich doch schon einmal, dass ich wenigstens eine Verbindung aufgebaut bekomme :)

Nun bin ich gerade nach deiner Info dabei, mich in Google schlau zu machen was

"java.sql.SQLException: Column not found: 2" bedeutet. Mal schauen was bei raus kommt.

Danke
 

peterdacn

Mitglied
ich war überrascht, dass die Tabelle schon existiert. Es wird anscheinend immer automatisch eine Beispielstabelle hinzugefügt der Datenbank.

Wenn ich den Manager der HSQL Datenbank nehme und folgenden Insert Befehl ausführe, wird auch ein neuer Eintrag durchgeführt:

INSERT INTO Customer (ID, FIRSTNAME, LASTNAME, STREET, CITY) Values (51, 'Hans', 'Egon', '23 - 20th Ave.' ,'Dallas')

führe ich den befehl in meinem Java Programm aus, schlägt er fehl :/

Java:
  stmt.executeUpdate( "INSERT INTO Customer (ID, FIRSTNAME, LASTNAME, STREET, CITY)  Values ('Hans', 'Egon', '23 - 20th Ave.' ,'Dallas')" );

Habe auch das Manual hinzugezogen von HSQL, aber da finde ich zu dem Punkt nichts, was ich anders mache als die in dem Manual schreiben.

Ansich muss es doch hier nur eine Kleinigkeit sein, wenn ich schon verbunden bin mit der DB, dann kann es doch nur an meinem Befehl liegen :/
 

velaluka

Aktives Mitglied
Naja,
stmt.executeUpdate( "INSERT INTO Customer (ID, FIRSTNAME, LASTNAME, STREET, CITY) Values ('Hans', 'Egon', '23 - 20th Ave.' ,'Dallas')" );
eine ID gibs du aber nicht mit rein. Fünf Parameter aber nur vier Werte:(
Das sieht nicht wirklich gut aus;)
Ciao velaluka
 

peterdacn

Mitglied
Oh mensch Sorry, das ich eine verhunzte Zeile hier reinkopiert habe. Habe da etwas rumprobiert. Auch wenn ich dort die ID mit angebe bekomme ich den selben Fehler.

Nehme ich die ID raus, sodass dort folgender Befehl steht:
Java:
 stmt.executeUpdate( "INSERT INTO Customer (FIRSTNAME, LASTNAME, STREET, CITY)  Values ('Hans', 'Egon', '23 - 20th Ave.' ,'Dallas')" );

Dann erhalte ich die selbe Fehlermeldung wie oben genannt, jedoch statt ID ein FIRSTNAME.

:S
 

peterdacn

Mitglied
ja, mit der ID stimme ich dir zu. Allerdings auch nach weiteren Recherchen komme ich nicht weiter.
Der Fehler bleibt der selbe :/

Ich habe den Befehl in meinem Manager getestet, dort wird der Befehl auch ausgeführt.
Nun denke ich, dass ich irgendwie in dem JavaProgramm noch drauf hinweisen muss, was FIRSTNAME etc. ist.

Schreibe ich meine Befehlszeile um zu folgender:

Java:
 stmt.executeUpdate( "INSERT INTO Customer Values ('Hans', 'Egon', '23 - 20th Ave.' ,'Dallas')" );

Dann hat er den Fehler:
"java.sql.SQLException: Column not found: 2"

Also so darf es nicht sein; sondern wie auch benutzt muss es:

Java:
  stmt.executeUpdate( "INSERT INTO Customer (ID, FIRSTNAME, LASTNAME, STREET, CITY)  Values ('Hans', 'Egon', '23 - 20th Ave.' ,'Dallas')" );
sein.

Allerdings muss da wohl noch etwas abgeändert werden, jedoch nicht im Befehl, sondern davor, da der Befehl ja in dem Manager fuzen tut. :/ Jemand vllt noch einen Denkanstoß?
 
Zuletzt bearbeitet:

Atze

Top Contributor
wenn die erste spalte ne id ist und autoincrement, versuch:

Java:
stmt.executeUpdate( "INSERT INTO Customer Values (null,'Hans', 'Egon', '23 - 20th Ave.' ,'Dallas')" );

damit er null für die id spalte hat
 

velaluka

Aktives Mitglied
Hallo,
also entweder du gibst in deinem Insert Statement keine SPalten an, also nur die Tabelle(hier Customer) dann musst du alle Spalten mit Werten füllen. Wenn nichts dann halt NULL. Oder du gibst an welche Spalten du setzen willst (Customer(firstname,...) dann müssen die Werte nach values zu den Spalten passen. Wenn deine Tabelle eine Id Spalte mit Autoincrement hat, musst du keine id angeben. Sie wird dann automatisch von der DB gesetzt. Wenn du einen
SQL:
Select * from customer
machst (Im DatabaseManager) siehst du ja ob eine Id für die jeweiligen inserts ohne Id erzeugt wurde.
Dann müsstes du auf der Java Seite halt die Spalten angeben....
Ich hoffe es hilft...
Ciao velaluka
 

damien

Aktives Mitglied
Was passiert denn wenn du das Insertstatement probeweise weglässt und nur das SELECT FROM ausführst ? Funktioniert das ? Wenn ja mit welchem Ergebnis ?
 

peterdacn

Mitglied
Java:
System.out.printf( "%s, %s %s%n", rs.getString(1),

Danke auch dir schonmal für die Zeit und Hilfe

Es lag an der Zeile... Schreibe ich dort nur:

while ( rs.next() )
System.out.printf(rs.getString(1) );

bekomme ich eine ausgabe. Ich muss mich dann wohl etwas mit dem Result Befehl auseinandersetzen.
Fuer weitere Hilfe bin ich sehr dankebar.
Ich moechte mich aber jetzt schon einmal bei allen beteiligten sehr bedanken!
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JSP Mit Java-Daten von einer Webseite zu ziehen? Data Tier 5
E Wie kann ich über einen Suchfeld in Java Server Pages nach Datenbankinhalten suchen? Data Tier 1
Kenan89 9.2-1000 JDBC 4 nicht für Java EE ? Data Tier 3
M Exception in thread "main" org.hibernate.MappingException: java.lang.ClassNotFoundException: Message Data Tier 4
M JPA Problem: java.sql.SQLSyntaxErrorException: Data Tier 7
I JPA EntityManager und persist() (Java EE 6) Data Tier 5
M JSF java.sql.SQLIntegrityConstraintViolationException nach zweitem persist Data Tier 6
S Datenbanktool für JAVA DB. Data Tier 10
C [Hibernate] Generierung von hbm.xml to Java Data Tier 4
H Java EE 5 + Glassfish 3 + Hibernate: Wie geht das genau? Data Tier 2
S OpenJPA mit einem Java-SE-Projekt benutzen Data Tier 5
J MappingException:Could not determine type for: java.util.Set Data Tier 5
byte Preload Pattern aus Java Magazin 4/08 fehlerhaft Data Tier 9
N java.sql.SQLException: Error in allocating a connection. Cau Data Tier 5
V [Hibernate] java.lang.NoClassDefFoundError Data Tier 6
alexpetri HSQL Datei in Tabelle speichern Data Tier 2
ARadauer Hibernate Query der Kindelemente, wie bidirektionale Verbindung vermeiden Data Tier 0
qwerqer Hibernate Verbindung geht nach 2 Minuten verloren Data Tier 2
Kenan89 JSP JSP Datenbank Verbindung Data Tier 14

Ähnliche Java Themen


Oben