Re: Bugs in the Databasemetadata for in-memory HSQLDB?

From: fredt (fredt_at_users.sourceforge.net)
Date: 02/20/05

  • Next message: Johan Reimers: "Displaying contents from database in an applet"
    Date: Sun, 20 Feb 2005 14:45:12 -0000
    
    

    You need to call getTables with a null first argument:

     RSTbls = DBMD.getTables(null, null, "%", aTyps);

    Fred

    "Albretch" <lbrtchx@hotmail.com> wrote in message
    news:14831146.1107866256992.JavaMail.X@x-0yc08mu0lvpns...
    >
    >
    > as specified in the JDBC MEtadata getTables and getColumns
    >
    > /doc/src/org/hsqldb/jdbc/jdbcDatabaseMetaData.html
    >
    > ..
    > 3. TABLE_NAME String => table name
    > ..
    >
    > should give you the TABLE_NAME for a given database.
    >
    > However the code snipped does not:
    >
    > // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    > import java.io.*;
    > import java.util.*;
    > import java.sql.*;
    >
    > // __
    > public class testCols02{
    > public static void main(String[] aArgs){
    > String aDrvr = "org.hsqldb.jdbcDriver";
    > String aDBURL = "jdbc:hsqldb:mem:";
    > String aTblsDB = ".";
    > String aUser = "sa";
    > String aPW = "";
    > // __
    > try{ Class.forName(aDrvr).newInstance(); }
    > catch(ClassNotFoundException KNFX){ KNFX.printStackTrace(); }
    > catch(InstantiationException InstX){ InstX.printStackTrace(); }
    > catch(IllegalAccessException IlgAxX){ IlgAxX.printStackTrace(); }
    > // __
    > Connection _DBCx = null;
    > Statement St = null;
    > DatabaseMetaData DBMD = null;
    > String aSQL = null;
    > String[] aTyps = new String[]{"TABLE"};
    > String aRSTblNm = null;
    > ResultSet RSTbls = null;
    > ResultSet RSCols = null;
    > int iTbls;
    > int iCols;
    > // __ Creating the in-memory DB
    > try{
    > _DBCx = DriverManager.getConnection(aDBURL + aTblsDB, aUser, aPW);
    > St = _DBCx.createStatement();
    >
    > System.out.println("// __ _DBCx: |" + _DBCx + "|");
    > System.out.println("// __ St: |" + St + "|");
    >
    > aSQL = "CREATE TABLE tbl00AA467E (fld00 CHAR(16), fld02 VARCHAR(255),
    > fld04 INT NOT NULL, fld06 REAL);";
    > System.out.println(" aSQL=" + aSQL);
    > St.executeUpdate(aSQL);
    > // __
    > St.close(); St = null;
    > // __
    > DBMD = _DBCx.getMetaData();
    > RSTbls = DBMD.getTables(aTblsDB, null, "%", aTyps);
    > // __
    > System.out.println("// __ _DBCx: |" + _DBCx + "|");
    > System.out.println("// __ DBMD: |" + DBMD + "|");
    > System.out.println("// __ RSTbls: |" + RSTbls + "|");
    > // __
    > iTbls = 0;
    > while(RSTbls.next()){
    > aRSTblNm = RSTbls.getString(3);
    > System.out.println(iTbls + " |" + aRSTblNm + "|");
    > ++iTbls;
    > }
    > RSTbls.close(); RSTbls = null;
    > System.out.println(" iTbls: |" + iTbls + "|");
    > // __
    > }catch(SQLException SQLX){ SQLX.printStackTrace(); }
    > // __
    > finally{
    > if(St != null){ try{ St.close(); }catch(SQLException SQLX){ ; } St =
    > null; }
    > if(_DBCx != null){ try{ _DBCx.close(); }catch(SQLException SQLX){ ; }
    > _DBCx = null; }
    > }// finally
    > }
    > }
    > // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    >
    > I have tested this code with different DBMS and it works fine except for
    > in-memory hsqldb
    >
    > Any examples of how to get the tables and their column names of an
    > in-memory hsqldb?
    >
    >
    >
    >


  • Next message: Johan Reimers: "Displaying contents from database in an applet"