# Text-Tabellen in HSQLDB



## Alex_winf01 (17. Jul 2006)

Hallo Forengemeinde,

ich möchte in HSQLDB eine Texttabelle erstellen. Aus der Dokumentation weiss ich, dass ich hierfür folgendes Statement benötige:


```
In addition, a SET command specifies the file and the separator character that the Text table uses:

    SET TABLE <tablename> SOURCE <quoted_filename_and_options> [DESC]
```

Mein Beispielprogramm siet wie folgt aus:


```
import java.sql.*;

import java.util.logging.*;



public class UseHSQLDB {

   static Logger log = Logger.getLogger("de.myname.UseHSQLDB");



   public static void main(String[] args)

      throws SQLException, ClassNotFoundException { // Doit better ...



   log.log(Level.INFO, "Starting to load JDBCDriver... ");

   Class.forName("org.hsqldb.jdbcDriver");

   log.log(Level.INFO, "JDBC Driver successfully loaded!");



   Connection con =

      DriverManager.getConnection( // tmp must exist. Right slash.

         //"jdbc:hsqldb:D:/tmp/musicShop","sa","");
         //"jdbc:hsqldb:C:/tmp/musicShop","sa","");
         "jdbc:hsqldb:C:/Dokumente und Einstellungen/Haefner/Eigene Dateien/Codeschnipsel/tmp/musicShop","sa","");

   //log.log(Level.INFO, "Connection established!");



   Statement stmt = con.createStatement();

   String sqlQuery =

      "CREATE TABLE cdShop (cdNr INTEGER, cdArtist CHAR(20), cdTitle CHAR(20))";
    
   ResultSet rs = stmt.executeQuery(sqlQuery);
   rs = stmt.executeQuery(sqlQuery);



   sqlQuery = "INSERT INTO cdShop VALUES (1,'Groeni','Mensch')";

   rs = stmt.executeQuery(sqlQuery);

   sqlQuery = "INSERT INTO cdShop VALUES (2,'Sting','Fields of Gold')";

   rs = stmt.executeQuery(sqlQuery);

   sqlQuery = "INSERT INTO cdShop VALUES (3,'Bach','Pluratorium')";

   rs = stmt.executeQuery(sqlQuery);



   sqlQuery = "UPDATE cdShop SET cdTitle='W-Oratorium' WHERE cdNr=1";

   rs = stmt.executeQuery(sqlQuery);



   sqlQuery = "SELECT * FROM cdShop";

   rs = stmt.executeQuery(sqlQuery);

   System.out.println("\n\n\nCD Shop DB\n=============\n");

   int counter = 0;

   while (rs.next()) {

      System.out.println(counter++ +".Datensatz:");

      int cdNr = rs.getInt("cdNr");

      System.out.println("\t[cdNr ->" + cdNr + "]");

      String cdArtist = rs.getString("cdArtist");

      System.out.println("\t[cdArtist ->" + cdArtist + "]");

      String cdTitle = rs.getString("cdTitle");

      System.out.println("\t[cdTitle ->" + cdTitle + "]\n");

   }

   con.close();

   }
   }
```

Den CREATE-TABLE-Befehl muss ich wie folgt ändern: 
	
	
	
	





```
CREATE TABELE TEXT TABLE
```

Wie muss ich jetzt den SET-Befehl einbinden?


----------



## foobar (17. Jul 2006)

Genauso wie es in der Doku beschrieben wird:

```
SET TABLE T_MYTABLE SOURCE "T_MYTABLE.csv"
```


----------



## Alex_winf01 (17. Jul 2006)

Ich nehme mal an, dass ich das SET bereits in die CREATE-Table-Anweisung einbauen muss?


----------



## foobar (17. Jul 2006)

Du mußt 2 Queries absetzen zuerst CREATE TEXTTABLE ... und dann SET ...
Probier es doch einfach mal aus.


----------



## Alex_winf01 (17. Jul 2006)

Wenn ich 2 Queries setzte, bekomme ich die Fehlermeldung, dass die Tabelle bereits vorhanden ist.


----------



## foobar (17. Jul 2006)

Poste mal den Code. Machst du acuch ein CREATE TEXTTABLE? In deinem Code sieht das nämlich anders aus.

Du mußt einfach 2 Queries hintereinander absetzen im ersten CREATE TABLE  T_MYTABLE (col1 VARCHAR) und dann im 2ten SET TABLE T_MYTABLE SOURCE "T_MYTABLE.csv" die Parameter kanns t du erstmal weglassen beim Set-Statement.

P.S. du solltest die beiden Queries noch mit dem Statement CHECKPOINT abschliessen, dann werden die Textdateien nue geschrieben und du kannst sofort auf die Tabellen zugreifen.

Ansonsten RTFM, das ist alles sehr ausführlich dokumentiert!!!!!


----------



## Alex_winf01 (17. Jul 2006)

Hier ist der Code:


```
import java.sql.*;

import java.util.logging.*;



public class UseHSQLDB {

   static Logger log = Logger.getLogger("de.myname.UseHSQLDB");



   public static void main(String[] args)

      throws SQLException, ClassNotFoundException { // Doit better ...



   log.log(Level.INFO, "Starting to load JDBCDriver... ");

   Class.forName("org.hsqldb.jdbcDriver");

   log.log(Level.INFO, "JDBC Driver successfully loaded!");



   Connection con =

      DriverManager.getConnection( // tmp must exist. Right slash.

         //"jdbc:hsqldb:D:/tmp/musicShop","sa","");
         //"jdbc:hsqldb:C:/tmp/musicShop","sa","");
         "jdbc:hsqldb:C:/Dokumente und Einstellungen/Haefner/Eigene Dateien/Codeschnipsel/tmp/cdShop","sa","");

   //log.log(Level.INFO, "Connection established!");



   Statement stmt = con.createStatement();

   String sqlQuery =

      "CREATE TEXT TABLE cdShop (cdNr INTEGER, cdArtist CHAR(20), cdTitle CHAR(20));";
   
   ResultSet rs = stmt.executeQuery(sqlQuery);
   rs = stmt.executeQuery(sqlQuery);
   
   sqlQuery = "SET TABLE cdShop SOURCE cdShop.csv";
   rs = stmt.executeQuery(sqlQuery);

   sqlQuery = "INSERT INTO cdShop VALUES (1,'Groeni','Mensch')";
   rs = stmt.executeQuery(sqlQuery);

   sqlQuery = "INSERT INTO cdShop VALUES (2,'Sting','Fields of Gold')";
   rs = stmt.executeQuery(sqlQuery);

   sqlQuery = "INSERT INTO cdShop VALUES (3,'Bach','Pluratorium')";
   rs = stmt.executeQuery(sqlQuery);
   sqlQuery = "UPDATE cdShop1 SET cdTitle='W-Oratorium' WHERE cdNr=1";

   rs = stmt.executeQuery(sqlQuery);



   sqlQuery = "SELECT * FROM cdShop";

   rs = stmt.executeQuery(sqlQuery);

   System.out.println("\n\n\nCD Shop DB\n=============\n");

   int counter = 0;

   while (rs.next()) {

      System.out.println(counter++ +".Datensatz:");

      int cdNr = rs.getInt("cdNr");

      System.out.println("\t[cdNr ->" + cdNr + "]");

      String cdArtist = rs.getString("cdArtist");

      System.out.println("\t[cdArtist ->" + cdArtist + "]");

      String cdTitle = rs.getString("cdTitle");

      System.out.println("\t[cdTitle ->" + cdTitle + "]\n");

   }

   con.close();

   }
   }
```


----------



## foobar (17. Jul 2006)

Du hast hier die Doublequotes vergessen:

```
"SET TABLE cdShop SOURCE \"cdShop.csv\"";
```


----------



## Alex_winf01 (17. Jul 2006)

Vielen Dank.


----------



## Alex_winf01 (17. Jul 2006)

Bekomme die Fehlermeldung

"Table already exists: CDSHOP in Statement CREATE TEXT TABLE cdShop".


----------

