Bugs in the Databasemetadata for in-memory HSQLDB?

A

Albretch

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?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top