# Keine Verbindung zu HSQLDB möglich



## ceyx (27. Aug 2007)

Ich möchte via eclipse auf eine OO Base Datenbank (HSQLDB) zugreifen. Ich habe die hsqldb.jar Datei bereits dem Build Path hinzugefügt. Nun habe ich mich mit 

Class.forName("org.hsqldb.jdbcDriver");
con = DriverManager.getConnection("jdbc:hsqldb:file:F:/DB Projekt");

zur DB verbunden. Das einzige was ich davon lesen kann sind aber nur die Schemata INFORMATIONS_SCHEMA und PUBLIC. Diese kann ich auch lesen wenn ich die DB aus dem Verzeichnis DB Projekt entferne --> keine Verbindung aufgebaut.

Weiß jeamand was ich falsch mache?


----------



## sparrow (27. Aug 2007)

Komme keine Fehlermeldungen?

Fehlt bei der Beschaffung der Connection nicht noch User und Passwort?


con = DriverManager.getConnection("jdbc:hsqldb:file:F:/DB Projekt", "user", "passwort");


----------



## ceyx (27. Aug 2007)

Ich habe nie einen User angelegt, darum dachte ich, dass es ohne auch geht. Ausserdem habe ich es bei einer Access DB auch ohne user und pwd hinbekommen.


----------



## sparrow (27. Aug 2007)

Dann zeig doch bitte mal den Inhalt von F:\DB Projekt, vielleicht hat die Datenbank ja auch einen Namen?


----------



## ceyx (27. Aug 2007)

Ich habs schon mit 
con = DriverManager.getConnection("jdbc:hsqldb:file:F:/DB Projekt/myDB.odb");
probiert, hat leider auch nicht funktioniert.


----------



## tuxedo (27. Aug 2007)

AFAIK ist ODB genau wie ODT ein gezipptes Format das die eigentlichen Daten enthält. Probier mal das Ding zu entpacken. 

- ALex


----------



## ceyx (27. Aug 2007)

Ich habs jetzt die DB in das Verzeichnis test entpackt. 
und den code auf 

con = DriverManager.getConnection("jdbc:hsqldb:file:F:/DB Projekt/test/database/data");

geändert. Das Problem bleibt aber leider immer noch.


----------



## tuxedo (27. Aug 2007)

Fehlermeldungen? HSQLDBs, die keinen expliziten Passwortschutz haben, benutzen, glaube ich, "sa" als Usernamen und "" als Passwort (also nix).

- Alex


----------



## ceyx (28. Aug 2007)

Ich habe keine Fehlermeldungen (was irgendwie merkwürdig ist) und mit dem user sa hab ich auch schon probiert....


----------



## ceyx (28. Aug 2007)

Nach dem Statement
select * from emp;

kommt eine Fehlermeldung, dass die Tabelle nicht gefunden werden kann, der Pfad stimmt aber und die Tabelle existiert.

Was soll das?


----------



## tuxedo (28. Aug 2007)

ceyx hat gesagt.:
			
		

> Nach dem Statement
> select * from emp;
> 
> kommt eine Fehlermeldung, dass die Tabelle nicht gefunden werden kann, der Pfad stimmt aber und die Tabelle existiert.
> ...


Probier mal:


```
SELECT * FROM PUBLIC.emp;
```

Vielleicht geht das ?!

- Alex


----------



## ceyx (28. Aug 2007)

Wird leider auch nicht gefunden. Ich habs jetzt mit allen möglichen Kombinationen mit dem user "sa" versucht, blieb aber leider auch ohne Erfolg.


----------



## tuxedo (28. Aug 2007)

Hmm, kennt HSQLDB denn kein "SHOW TABLES;" Befehl? Oder etwas in der Art? 

Die Tabelle muss ja da sein...irgendwo ...

- Alex


----------



## ceyx (28. Aug 2007)

Ich habe mir alle Schemata aufzeigen lassen. Bei Oracle bin ich es gewohnt, dass die ganzen Tabellen in diesen zu finden sind. Gefunden werden jedoch keine...


----------



## tuxedo (28. Aug 2007)

Das ist äußerst seltsam. Nimm mal die Sources von HSQLDB dazu und debugg das ganze doch mal...

Oder hast du schon mal probiert eine HSQL-Datenbank zu benutzen/erstellen die nicht mit OO gebastelt wurde? Weil wenn das schon fehlschlägt, dann liegts an noch was ganz anderem. 

BTW: HSQLDB liefert ein Tool mit, mit dem man die DB anschauen kann. Das könntest du auch mal testen. 

- Alex


----------



## ceyx (28. Aug 2007)

das ist ja echt schräg. So funktioniert es. Also muss es an OO liegen, oder?


----------



## tuxedo (28. Aug 2007)

Vergleiche doch am besten mal die File die OO in ODB gezippt hat und das was du außerhalb OO produziert hast (sind ja lesbarer Text). Zum einen gibts da die DATA-Datei. Die beschreibt den Aufbau der Tabellen etc, und zum anderen gibts die Script-Datei, die den Inhalt der Tabellen bereit hält (hoffe ich habs jetzt nicht verdreht).

Beide Files sind mit einem Texteditor lesbar. Wenn Notepad den Zeilenumbruch nicht gebacken kriegt, benutze doch WordPad oder einen anderen Editor der das auf die Reihe kriegt (Notepad++ oder Ultraedit oder sonst irgendwas).

Vielleicht fällt dir ja beim vergleichen der Files auf woran es hängt.

Kannst ja auch zwei Minimalbeispiele posten.

- Alex


----------



## ceyx (28. Aug 2007)

Jetzt kann ich mir die Werte sogar rauslesen wenn ich im Connection String die .odt Datei angebe, aber nur jene die ich über hsql eingegeben habe. Im OO Base kann ich nur die Werte lesen die ich im Base eingegeben habe.


----------



## ceyx (28. Aug 2007)

Danke für den guten Tipp. Ich glaube ich habe den Fehler gefunden: Base hat nämlich keine .script datei erstellt. HSQL speichert in dieser Datei die div. Befehle (Tabelle erstellen, befüllen). 
Vielleicht hat auch eclipse immer nach dieser .script datei gesucht. Jetzt müsste ich es so hinkriegen wie ich mir das vorstelle...

Ich möchte mich herzlichst für deine Ausdauer und Mühe bedanken


----------



## Heady86 (18. Sep 2009)

Hab momentan das gleiche Problem, deshalb hab ich keinen neuen Thread aufgemacht.

Ich wollt ein Beispiel ausm Inselbuch testen aber ich bekomm auch die Meldung:


> java.sql.SQLException: Table not found in statement [SELECT * FROM Person]
> at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
> at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
> at org.hsqldb.jdbc.jdbcStatement.executeQuery(Unknown Source)
> at Main.main(Main.java:35)



Die Script Datei ist bei mir aber vorhanden, daran liegt es nicht und mit Public hab ich auch schon versucht..

Hier mal der Code:


```
import java.text.ParseException;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main
{

	
	  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:\\....\\database", "sa", "" ); 
	      Statement stmt = con.createStatement(); 
	 
	 
	      ResultSet rs = stmt.executeQuery( "SELECT * FROM Person" ); 
	 
	      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(); } 
	    } 
	  } 
	}
```


----------



## Heady86 (18. Sep 2009)

Nabend, 
ich hab jetzt nochmal rumprobiert und es mal mit einer Access DB versucht, allerdings bekomm ich hier ne andere Fehlermeldung ;(



> java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]Ungültiger Deskriptorindex
> at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
> at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
> at sun.jdbc.odbc.JdbcOdbc.SQLColAttributes(Unknown Source)
> ...




Im Code nutze ich:


```
...
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); 
...
con = DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Users/Heady/Desktop/testdb.mdb","","" );
......
```

Schönes Weekend


----------



## Heady86 (23. Sep 2009)

Niemand eine Idee :noe: es muss doch schonmal jemand ne odb oder access datenbank erfolgreich abgefragt haben  

Entweder kommt obige Fehlermeldung bei einer access datenbnk oder aber das hier oder das hier bei einer odb

Grüße


----------



## Heady86 (3. Okt 2009)

Hi,

falls mal jemand das selbe Problem hat und der Vollständigkeit halber.
Wenn mal wieder jemand diese Fehlermeldung hat:


> java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]Ungültiger Deskriptorindex
> at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
> at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
> at sun.jdbc.odbc.JdbcOdbc.SQLColAttributes(Unknown Source)
> ...



dann liegt das in dem Bereich:


```
while ( rs.next() ) 
		   System.out.printf( "%s %s%n", rs.getString(1), rs.getString(2));
```
und zwar wenn man eine Spalte angibt die es in der Tabelle nicht gibt.
z.B hab ich 2 spalten, wenn ich jetzt aber 
	
	
	
	





```
rs.getString(3)
```
 eingebe kommt obige Fehlermeldung. Viel Spaß


----------

