# HSQL einbinden !?



## Testlauf (14. Jan 2010)

Guten Morgen,
versuche grade mit eclipse via Java auf meine lokale Datenbank zuzugreifen.
Bei meiner Kollegin funktioniert alles wunderbar, wenn sie das Script auf Windows XP ausführt.

Ich, mit Windows 7, bekomme immer Fehler angezeigt.
Hier erst einmal das Script (aus dem Netz kopiert):


```
import java.io.*;
import java.sql.*;


public class DbTableShow
{
  public static void main( String[] argv )
  {
    String sDbDrv= "org.hsqldb.jdbcDriver", sDbUrl="jdbc:hsqldb:hsql://localhost/tutorial", sTable="TRACK", sUsr="SA", sPwd="";
    
    if( null != sDbDrv && 0 < sDbDrv.length() &&
        null != sDbUrl && 0 < sDbUrl.length() &&
        null != sTable && 0 < sTable.length() ) {
      Connection cn = null;
      Statement  st = null;
      ResultSet  rs = null;
      try {
        // Select fitting database driver and connect:
        Class.forName( sDbDrv );
        cn = DriverManager.getConnection( sDbUrl, sUsr, sPwd );
        st = cn.createStatement();
        rs = st.executeQuery( "select * from " + sTable );
        // Get meta data:
        ResultSetMetaData rsmd = rs.getMetaData();
        int i, n = rsmd.getColumnCount();
        // Print table content:
        for( i=0; i<n; i++ )
          System.out.print( "+---------------" );
        System.out.println( "+" );
        for( i=1; i<=n; i++ )    // Attention: first column with 1 instead of 0
          System.out.print( "| " + extendStringTo14( rsmd.getColumnName( i ) ) );
        System.out.println( "|" );
        for( i=0; i<n; i++ )
          System.out.print( "+---------------" );
        System.out.println( "+" );
        while( rs.next() ) {
          for( i=1; i<=n; i++ )  // Attention: first column with 1 instead of 0
            System.out.print( "| " + extendStringTo14( rs.getString( i ) ) );
          System.out.println( "|" );
        }
        for( i=0; i<n; i++ )
          System.out.print( "+---------------" );
        System.out.println( "+" );
      } catch( Exception ex ) {
        System.out.println( ex );
      } finally {
        try { if( null != rs ) rs.close(); } catch( Exception ex ) {}
        try { if( null != st ) st.close(); } catch( Exception ex ) {}
        try { if( null != cn ) cn.close(); } catch( Exception ex ) {}
      }
    }
  }

  // Extend String to length of 14 characters
  private static final String extendStringTo14( String s )
  {
    if( null == s ) s = "";
    final String sFillStrWithWantLen = "              ";
    final int iWantLen = sFillStrWithWantLen.length();
    final int iActLen  = s.length();
    if( iActLen < iWantLen )
      return (s + sFillStrWithWantLen).substring( 0, iWantLen );
    if( iActLen > 2 * iWantLen )
      return s.substring( 0, 2 * iWantLen );
    return s;
  }
}
```

Dabei ist die Zeile

```
String sDbDrv= "org.hsqldb.jdbcDriver", sDbUrl="jdbc:hsqldb:hsql://localhost/tutorial", sTable="TRACK", sUsr="SA", sPwd="";
```
für die Anmeldung an der Datenbank.

Als Fehler bekomme ich

java.sql.SQLTransientConnectionException: connection exception: connection failure: java.io.EOFException


Kann mir da jemand weiterhelfen? Auf dem einen Laptop funktioniert es so einwandfrei, auf meinem aber nicht...


----------



## DerEisteeTrinker (14. Jan 2010)

hast du nachgeschaut, ob die Version von HSQLDB auch für Windows 7 zugelassen ist. ich weiß nicht, was KleinWeich da wieder alles drinne verbrochen hat in dem OS


----------



## frapo (18. Jan 2010)

DerEisteeTrinker hat gesagt.:


> hast du nachgeschaut, ob die Version von HSQLDB auch für Windows 7 *zugelassen* ist.



Hm, was soll denn zugelassen heissen? HSQLDB besteht doch nur aus jar-Files. Kann mir nicht vorstellen, dass selbst MS, auf den Gedanken kommen könnte, einzelne Java-Archivdateien zu bannen.  

EOFException (Java Platform SE 6) sagt ja etwas mehr zu dem Fehler. Was das nun mit XP oder Teletubbies V7 zu tun haben könnte, wüsste ich auch nicht.


----------



## maki (18. Jan 2010)

Könnte es sein dass eine FW den Port blockiert?


----------



## DerEisteeTrinker (19. Jan 2010)

@frapo

du weißt nicht, was KleinWeich wieder für unnötige Spielereien eingebaut hat. sonst könnte ich die Xp progs auf Windows 7 benutzen. geht aber net. Selbst die VM benutzt unter Windows die libs von KleinWeich und somit auch HSQLDB. somit kann es sein, dass HSQLDB die Verbindung nicht sauber hinbekommt. Schau auf der Seite von HSQLDB nach, ob es für Windows 7 schon getestet wurde.


----------



## frapo (20. Jan 2010)

DerEisteeTrinker hat gesagt.:


> @frapo
> 
> Schau auf der Seite von HSQLDB nach, ob es für Windows 7 schon getestet wurde.



Tät ich glatt machen, wenn auf HSQLDB irgendetwas, zu irgendeinem OS erwähnt werden würde. So wie ich das sehe, gibt es keine Besonderheiten zu irgendeinem OS, so wie ich das von Jars ja auch erwarten würde. Wie maki schon meinte, es könnte irgendeine Einstellungssache im OS sein. 

Weder in der Doku, noch in der FAQ kann ich zu diesem Thema irgendetwas finden. Aber vielleicht hast du ja einen konkreten Link dazu? 

Gruß
frapo


----------



## thom (22. Jan 2010)

Deine Klasse versucht sich über eine Netzwerkverbindung mit der Datenbank tutorial auf einem HSQL-Server (auf Deinem Rechner zu verbinden). Gibt es die Datenbank auf Deinem Rechner überhaupt? Ist der Server über das Netzwerk erreichbar (die Frage nach einer lokalen Firewall ist ja schon gefallen)?

Ändere doch mal die Connection-URL auf:
jdbc:hsqldb:mem:.
Dann wird eine Datenbank im Speicher Deines Computers angelegt und benutzt.
Damit mußt Du dann andere Fehlermeldungen bekommen, weil Deine Klasse Tabellen abfragt, die vorher nicht angelegt worden sind.

Btw. Du schreibst da was von "Script". Welches Script meinst Du?

Thom


----------

