I have given up, now I am having a tool written.

Attached are some files to review. If you wan to please review them, make 
comments etc...

Sincerely,

Jason Pyeron


-- 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-                                                               -
- Jason Pyeron                   http://www.pyerotechnics.com   -
- Partner & Sr. Manager         Pyerotechnics Development, Inc. -
- +1 (443) 451-2697             500 West University Parkway #1S -
- +1 (410) 808-6646 (c)         Baltimore, Maryland  21210-3253 -
-                                                               -
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

This message is for the designated recipient only and may contain 
privileged, proprietary, or otherwise private information. If you 
have received it in error, purge the message from your system and 
notify the sender immediately.  Any other use of the email by you 
is prohibited.


/*



(c) 2003 Pyerotechnics Development, Inc.



*/

import java.sql.*;

import java.util.*;

import java.io.*;



public class DumpDatabase

{

 static HashMap s;

 static HashMap p;

 static HashMap o;

 static

 {

  s=new HashMap();

  o=new HashMap();

  p=new HashMap();

  s.put(new Integer(java.sql.Types.ARRAY),"ARRAY");

  s.put(new Integer(java.sql.Types.BIGINT),"BIGINT");

  s.put(new Integer(java.sql.Types.BINARY),"BINARY");

  s.put(new Integer(java.sql.Types.BIT),"BIT");

  s.put(new Integer(java.sql.Types.BLOB),"BLOB");

  s.put(new Integer(java.sql.Types.BOOLEAN),"BOOLEAN");

  s.put(new Integer(java.sql.Types.CHAR),"CHAR");

  s.put(new Integer(java.sql.Types.CLOB),"CLOB");

  s.put(new Integer(java.sql.Types.DATALINK),"DATALINK");

  s.put(new Integer(java.sql.Types.DATE),"DATE");

  s.put(new Integer(java.sql.Types.DECIMAL),"DECIMAL");

  s.put(new Integer(java.sql.Types.DISTINCT),"DISTINCT");

  s.put(new Integer(java.sql.Types.DOUBLE),"DOUBLE");

  s.put(new Integer(java.sql.Types.FLOAT),"FLOAT");

  s.put(new Integer(java.sql.Types.INTEGER),"INTEGER");

  s.put(new Integer(java.sql.Types.JAVA_OBJECT),"JAVA_OBJECT");

  s.put(new Integer(java.sql.Types.LONGVARBINARY),"LONGVARBINARY");

  s.put(new Integer(java.sql.Types.LONGVARCHAR),"LONGVARCHAR");

  s.put(new Integer(java.sql.Types.NULL),"NULL");

  s.put(new Integer(java.sql.Types.NUMERIC),"NUMERIC");

  s.put(new Integer(java.sql.Types.OTHER),"OTHER");

  s.put(new Integer(java.sql.Types.REAL),"REAL");

  s.put(new Integer(java.sql.Types.REF),"REF");

  s.put(new Integer(java.sql.Types.SMALLINT),"SMALLINT");

  s.put(new Integer(java.sql.Types.STRUCT),"STRUCT");

  s.put(new Integer(java.sql.Types.TIME),"TIME");

  s.put(new Integer(java.sql.Types.TIMESTAMP),"TIMESTAMP");

  s.put(new Integer(java.sql.Types.TINYINT),"TINYINT");

  s.put(new Integer(java.sql.Types.VARBINARY),"VARBINARY");

  s.put(new Integer(java.sql.Types.VARCHAR),"VARCHAR");

  p.put(new Integer(java.sql.Types.ARRAY),"Array");

  p.put(new Integer(java.sql.Types.BIGINT),"long");

  p.put(new Integer(java.sql.Types.BINARY),"byte[]");

  p.put(new Integer(java.sql.Types.BIT),"boolean");

  p.put(new Integer(java.sql.Types.BLOB),"Blob");

  p.put(new Integer(java.sql.Types.BOOLEAN),"boolean");

  p.put(new Integer(java.sql.Types.CHAR),"String");

  p.put(new Integer(java.sql.Types.CLOB),"Clob");

  p.put(new Integer(java.sql.Types.DATALINK),"?");

  p.put(new Integer(java.sql.Types.DATE),"java.sql.Date");

  p.put(new Integer(java.sql.Types.DECIMAL),"java.math.BigDecimal");

  p.put(new Integer(java.sql.Types.DISTINCT),"??");

  p.put(new Integer(java.sql.Types.DOUBLE),"double");

  p.put(new Integer(java.sql.Types.FLOAT),"double");

  p.put(new Integer(java.sql.Types.INTEGER),"int");

  p.put(new Integer(java.sql.Types.JAVA_OBJECT),"???");

  p.put(new Integer(java.sql.Types.LONGVARBINARY),"byte[]");

  p.put(new Integer(java.sql.Types.LONGVARCHAR),"String");

  p.put(new Integer(java.sql.Types.NULL),"????");

  p.put(new Integer(java.sql.Types.NUMERIC),"java.math.BigDecimal");

  p.put(new Integer(java.sql.Types.OTHER),"?????");

  p.put(new Integer(java.sql.Types.REAL),"float");

  p.put(new Integer(java.sql.Types.REF),"Ref");

  p.put(new Integer(java.sql.Types.SMALLINT),"short");

  p.put(new Integer(java.sql.Types.STRUCT),"Struct");

  p.put(new Integer(java.sql.Types.TIME),"java.sql.Time");

  p.put(new Integer(java.sql.Types.TIMESTAMP),"java.sql.Timestamp");

  p.put(new Integer(java.sql.Types.TINYINT),"byte");

  p.put(new Integer(java.sql.Types.VARBINARY),"byte[]");

  p.put(new Integer(java.sql.Types.VARCHAR),"String");

  o.put(new Integer(java.sql.Types.ARRAY),"Array");

  o.put(new Integer(java.sql.Types.BIGINT),"Long");

  o.put(new Integer(java.sql.Types.BINARY),"byte[]");

  o.put(new Integer(java.sql.Types.BIT),"Boolean");

  o.put(new Integer(java.sql.Types.BLOB),"Blob");

  o.put(new Integer(java.sql.Types.BOOLEAN),"Boolean");

  o.put(new Integer(java.sql.Types.CHAR),"String");

  o.put(new Integer(java.sql.Types.CLOB),"Clob");

  o.put(new Integer(java.sql.Types.DATALINK),"?");

  o.put(new Integer(java.sql.Types.DATE),"java.sql.Date");

  o.put(new Integer(java.sql.Types.DECIMAL),"java.math.BigDecimal");

  o.put(new Integer(java.sql.Types.DISTINCT),"??");

  o.put(new Integer(java.sql.Types.DOUBLE),"Double");

  o.put(new Integer(java.sql.Types.FLOAT),"Double");

  o.put(new Integer(java.sql.Types.INTEGER),"Integer");

  o.put(new Integer(java.sql.Types.JAVA_OBJECT),"???");

  o.put(new Integer(java.sql.Types.LONGVARBINARY),"byte[]");

  o.put(new Integer(java.sql.Types.LONGVARCHAR),"String");

  o.put(new Integer(java.sql.Types.NULL),"????");

  o.put(new Integer(java.sql.Types.NUMERIC),"java.math.BigDecimal");

  o.put(new Integer(java.sql.Types.OTHER),"?????");

  o.put(new Integer(java.sql.Types.REAL),"Float");

  o.put(new Integer(java.sql.Types.REF),"Ref");

  o.put(new Integer(java.sql.Types.SMALLINT),"Integer");

  o.put(new Integer(java.sql.Types.STRUCT),"SQLData");

  o.put(new Integer(java.sql.Types.TIME),"java.sql.Time");

  o.put(new Integer(java.sql.Types.TIMESTAMP),"java.sql.Timestamp");

  o.put(new Integer(java.sql.Types.TINYINT),"Integer");

  o.put(new Integer(java.sql.Types.VARBINARY),"byte[]");

  o.put(new Integer(java.sql.Types.VARCHAR),"String");



 }





 public static String encode(String str)

 {

  str=str.replaceAll("&","&");

  str=str.replaceAll("<","&lt;");

  str=str.replaceAll(">","&gt;");

  str=str.replaceAll("'","&apos;");

  str=str.replaceAll("\"","&quot;");

  return str;

 }



 public static String primitiveType(int k)

 {

  return String.valueOf(p.get(new Integer(k)));

 }



 public static String objectType(int k)

 {

  return String.valueOf(o.get(new Integer(k)));

 }



 public static String sqlType(int k)

 {

  return String.valueOf(s.get(new Integer(k)));

 }



 public static void dumpCatalogs(String ident, DatabaseMetaData dmd, PrintStream out) 
throws Throwable

 {

  ResultSet rs=dmd.getCatalogs();

  out.println(ident+"<catalogs>");

  while(rs.next())

  {

   out.println(ident+" <catalog TABLE_CAT='"+encode(rs.getString("TABLE_CAT"))+"' />");

  }

  out.println(ident+"</catalogs>");

  rs.close();

 }



 public static void dumpSchemas(String ident, DatabaseMetaData dmd, PrintStream out) 
throws Throwable

 {

  ResultSet rs=dmd.getSchemas();

  out.println(ident+"<schemas>");

  while(rs.next())

  {

   out.println(ident+" <schema TABLE_SCHEM='"+encode(rs.getString("TABLE_SCHEM"))+"' 
/>");

  }

  out.println(ident+"</schemas>");

  rs.close();

 }



 public static void dumpTables(String ident, DatabaseMetaData dmd, PrintStream out) 
throws Throwable

 {

  ResultSet rs=dmd.getTables(null,null,null,null);

  out.println(ident+"<tables>");

  while(rs.next())

  {

   out.print(ident+" <table");



   String cat;

   String sch;

   String tab;

   String data;



   cat=data=rs.getString("TABLE_CAT");   if (data!=null && !data.trim().equals("")) 
out.print(" TABLE_CAT='"+encode(data)+"'");

   sch=data=rs.getString("TABLE_SCHEM"); if (data!=null && !data.trim().equals("")) 
out.print(" TABLE_SCHEM='"+encode(data)+"'");

   tab=data=rs.getString("TABLE_NAME");  if (data!=null && !data.trim().equals("")) 
out.print(" TABLE_NAME='"+encode(data)+"'");

       data=rs.getString("TABLE_TYPE");  if (data!=null && !data.trim().equals("")) 
out.print(" TABLE_TYPE='"+encode(data)+"'");

       data=rs.getString("REMARKS");     if (data!=null && !data.trim().equals("")) 
out.print(" REMARKS='"+encode(data)+"'");



   out.println(">");



   dumpColumns(ident+"  ",dmd,out,cat,sch,tab);

   dumpIndicies(ident+"  ",dmd,out,cat,sch,tab);

   dumpKeys(ident+"  ",dmd,out,cat,sch,tab);



   out.println(ident+" </table>");

  }

  out.println(ident+"</tables>");

  rs.close();

 }



 public static void dumpColumns(String ident, DatabaseMetaData dmd, PrintStream out, 
String cat, String sch, String tab) throws Throwable

 {

  ResultSet rs=dmd.getColumns(cat,sch,tab,null);

  out.println(ident+"<columns>");

  while(rs.next())

  {

   out.print(ident+" <column");



   String data;

   data=rs.getString("COLUMN_NAME");           if (data!=null && 
!data.trim().equals("")) out.print(" COLUMN_NAME='"+encode(data)+"'");

   data=rs.getString("COLUMN_NAME");           if (data!=null && 
!data.trim().equals(""))

   {

    String f=data.substring(0,1).toUpperCase();

    String l=data.substring(1);

    data=f+l;

    out.print(" columnNameHacked='"+encode(data)+"'");

   }

   data=rs.getString("TYPE_NAME");             if (data!=null && 
!data.trim().equals("")) out.print(" TYPE_NAME='"+encode(data)+"'");

   data=rs.getString("COLUMN_SIZE");           if (data!=null && 
!data.trim().equals("")) out.print(" COLUMN_SIZE='"+encode(data)+"'");

   data=rs.getString("BUFFER_LENGTH");         if (data!=null && 
!data.trim().equals("")) out.print(" BUFFER_LENGTH='"+encode(data)+"'");

   data=rs.getString("DECIMAL_DIGITS");        if (data!=null && 
!data.trim().equals("")) out.print(" DECIMAL_DIGITS='"+encode(data)+"'");

   data=rs.getString("NUM_PREC_RADIX");        if (data!=null && 
!data.trim().equals("")) out.print(" NUM_PREC_RADIX='"+encode(data)+"'");

   data=rs.getString("DATA_TYPE");             if (data!=null && 
!data.trim().equals("")) out.print(" DATA_TYPE='"+encode(data)+"'");

   data=rs.getString("IS_NULLABLE");           if (data!=null && 
!data.trim().equals("")) out.print(" IS_NULLABLE='"+encode(data)+"'");

   data=rs.getString("ORDINAL_POSITION");      if (data!=null && 
!data.trim().equals("")) out.print(" ORDINAL_POSITION='"+encode(data)+"'");

   data=rs.getString("CHAR_OCTET_LENGTH");     if (data!=null && 
!data.trim().equals("")) out.print(" CHAR_OCTET_LENGTH='"+encode(data)+"'");

   data=rs.getString("SQL_DATETIME_SUB");      if (data!=null && 
!data.trim().equals("")) out.print(" SQL_DATETIME_SUB='"+encode(data)+"'");

   data=rs.getString("SQL_DATA_TYPE");         if (data!=null && 
!data.trim().equals("")) out.print(" SQL_DATA_TYPE='"+encode(data)+"'");

   data=rs.getString("COLUMN_DEF");            if (data!=null && 
!data.trim().equals("")) out.print(" COLUMN_DEF='"+encode(data)+"'");

   data=rs.getString("REMARKS");               if (data!=null && 
!data.trim().equals("")) out.print(" REMARKS='"+encode(data)+"'");

   data=rs.getString("NULLABLE");              if (data!=null && 
!data.trim().equals("")) out.print(" NULLABLE='"+encode(data)+"'");

   data=primitiveType(rs.getInt("DATA_TYPE")); if (data!=null && 
!data.trim().equals("")) out.print(" primitiveType='"+encode(data)+"'");

   data=objectType(rs.getInt("DATA_TYPE"));    if (data!=null && 
!data.trim().equals("")) out.print(" objectType='"+encode(data)+"'");

   data=sqlType(rs.getInt("DATA_TYPE"));       if (data!=null && 
!data.trim().equals("")) out.print(" sqlType='"+encode(data)+"'");



   out.println("/>");

  }

  out.println(ident+"</columns>");

  rs.close();

 }



 public static void dumpIndicies(String ident, DatabaseMetaData dmd, PrintStream out, 
String cat, String sch, String tab) throws Throwable

 {

  ResultSet rs=dmd.getIndexInfo(cat,sch,tab,false,true);

  out.println(ident+"<indicies>");

  if (rs.next())

  {

   out.print(ident+" <index");



   String data;



   data=rs.getString("NON_UNIQUE");       if (data!=null && !data.trim().equals("")) 
out.print(" NON_UNIQUE='"+encode(data)+"'");

   data=rs.getString("INDEX_QUALIFIER");  if (data!=null && !data.trim().equals("")) 
out.print(" INDEX_QUALIFIER='"+encode(data)+"'");

   data=rs.getString("INDEX_NAME");       if (data!=null && !data.trim().equals("")) 
out.print(" INDEX_NAME='"+encode(data)+"'");

   data=rs.getString("TYPE");             if (data!=null && !data.trim().equals("")) 
out.print(" TYPE='"+encode(data)+"'");

   data=rs.getString("PAGES");            if (data!=null && !data.trim().equals("")) 
out.print(" PAGES='"+encode(data)+"'");

   data=rs.getString("FILTER_CONDITION"); if (data!=null && !data.trim().equals("")) 
out.print(" FILTER_CONDITION='"+encode(data)+"'");



   out.println(">");





   rs.beforeFirst();



   while (rs.next())

   {

    out.print(ident+"  <indexcolumn");



    data=rs.getString("COLUMN_NAME");      if (data!=null && !data.trim().equals("")) 
out.print(" COLUMN_NAME='"+encode(data)+"'");

   data=rs.getString("COLUMN_NAME");           if (data!=null && 
!data.trim().equals(""))

   {

    String f=data.substring(0,1).toUpperCase();

    String l=data.substring(1);

    data=f+l;

    out.print(" columnNameHacked='"+encode(data)+"'");

   }

    data=rs.getString("ORDINAL_POSITION"); if (data!=null && !data.trim().equals("")) 
out.print(" ORDINAL_POSITION='"+encode(data)+"'");

    data=rs.getString("CARDINALITY");      if (data!=null && !data.trim().equals("")) 
out.print(" CARDINALITY='"+encode(data)+"'");

    data=rs.getString("ASC_OR_DESC");      if (data!=null && !data.trim().equals("")) 
out.print(" ASC_OR_DESC='"+encode(data)+"'");



    out.println("/>");

   }





   out.println(ident+" </index>");



  }

  out.println(ident+"</indicies>");

  rs.close();

 }



 public static void dumpKeys(String ident, DatabaseMetaData dmd, PrintStream out, 
String cat, String sch, String tab) throws Throwable

 {

  ResultSet rs=dmd.getIndexInfo(cat,sch,tab,false,true);

  out.println(ident+"<keys>");

  dumpPKeys(ident+" ",dmd,out,cat,sch,tab);

  dumpFKeys(ident+" ",dmd,out,cat,sch,tab);

  dumpIKeys(ident+" ",dmd,out,cat,sch,tab);

  out.println(ident+"</keys>");

  rs.close();

 }



 public static void dumpPKeys(String ident, DatabaseMetaData dmd, PrintStream out, 
String cat, String sch, String tab) throws Throwable

 {

  ResultSet rs=dmd.getPrimaryKeys(cat,sch,tab);

  if (rs.next())

  {

   out.print(ident+"<pk");



   String data;



   data=rs.getString("PK_NAME"); if (data!=null && !data.trim().equals("")) 
out.print(" PK_NAME='"+encode(data)+"'");



   out.println(">");



   rs.beforeFirst();



   while (rs.next())

   {

    out.print(ident+" <pkcolumn");



    data=rs.getString("COLUMN_NAME"); if (data!=null && !data.trim().equals("")) 
out.print(" COLUMN_NAME='"+encode(data)+"'");

    data=rs.getString("COLUMN_NAME");           if (data!=null && 
!data.trim().equals(""))

    {

     String f=data.substring(0,1).toUpperCase();

     String l=data.substring(1);

     data=f+l;

     out.print(" columnNameHacked='"+encode(data)+"'");

    }

    data=rs.getString("KEY_SEQ");     if (data!=null && !data.trim().equals("")) 
out.print(" KEY_SEQ='"+encode(data)+"'");



    out.println("/>");

   }

   out.println(ident+"</pk>");

  }

  rs.close();

 }



 public static void dumpFKeys(String ident, DatabaseMetaData dmd, PrintStream out, 
String cat, String sch, String tab) throws Throwable

 {

  ResultSet rs=dmd.getImportedKeys(cat,sch,tab);

  if (rs.next())

  {

   out.print(ident+"<fk");



   String data;



   data=rs.getString("PK_NAME");       if (data!=null && !data.trim().equals("")) 
out.print(" PK_NAME='"+encode(data)+"'");

   data=rs.getString("FK_NAME");       if (data!=null && !data.trim().equals("")) 
out.print(" FK_NAME='"+encode(data)+"'");

   data=rs.getString("PKTABLE_NAME");  if (data!=null && !data.trim().equals("")) 
out.print(" PKTABLE_NAME='"+encode(data)+"'");

   data=rs.getString("PKTABLE_CAT");   if (data!=null && !data.trim().equals("")) 
out.print(" PKTABLE_CAT='"+encode(data)+"'");

   data=rs.getString("PKTABLE_SCHEM"); if (data!=null && !data.trim().equals("")) 
out.print(" PKTABLE_SCHEM='"+encode(data)+"'");

   data=rs.getString("DEFERRABILITY"); if (data!=null && !data.trim().equals("")) 
out.print(" DEFERRABILITY='"+encode(data)+"'");

   data=rs.getString("UPDATE_RULE");   if (data!=null && !data.trim().equals("")) 
out.print(" UPDATE_RULE='"+encode(data)+"'");

   data=rs.getString("DELETE_RULE");   if (data!=null && !data.trim().equals("")) 
out.print(" DELETE_RULE='"+encode(data)+"'");



   out.println(">");



   rs.beforeFirst();



   while (rs.next())

   {

    out.print(ident+" <fkcolumn");



    data=rs.getString("PKCOLUMN_NAME"); if (data!=null && !data.trim().equals("")) 
out.print(" PKCOLUMN_NAME='"+encode(data)+"'");

    data=rs.getString("PKCOLUMN_NAME");           if (data!=null && 
!data.trim().equals(""))

    {

     String f=data.substring(0,1).toUpperCase();

     String l=data.substring(1);

     data=f+l;

     out.print(" pkcolumnNameHacked='"+encode(data)+"'");

    }

    data=rs.getString("FKCOLUMN_NAME"); if (data!=null && !data.trim().equals("")) 
out.print(" FKCOLUMN_NAME='"+encode(data)+"'");

    data=rs.getString("FKCOLUMN_NAME");           if (data!=null && 
!data.trim().equals(""))

    {

     String f=data.substring(0,1).toUpperCase();

     String l=data.substring(1);

     data=f+l;

     out.print(" fkcolumnNameHacked='"+encode(data)+"'");

    }

    data=rs.getString("KEY_SEQ");       if (data!=null && !data.trim().equals("")) 
out.print(" KEY_SEQ='"+encode(data)+"'");



    out.println("/>");

   }

   out.println(ident+"</fk>");

  }

  rs.close();

 }



 public static void dumpIKeys(String ident, DatabaseMetaData dmd, PrintStream out, 
String cat, String sch, String tab) throws Throwable

 {

  ResultSet rs=dmd.getExportedKeys(cat,sch,tab);

  if (rs.next())

  {

   out.print(ident+"<ik");



   String data;



   data=rs.getString("PK_NAME");       if (data!=null && !data.trim().equals("")) 
out.print(" PK_NAME='"+encode(data)+"'");

   data=rs.getString("FK_NAME");       if (data!=null && !data.trim().equals("")) 
out.print(" FK_NAME='"+encode(data)+"'");

   data=rs.getString("FKTABLE_NAME");  if (data!=null && !data.trim().equals("")) 
out.print(" FKTABLE_NAME='"+encode(data)+"'");

   data=rs.getString("FKTABLE_CAT");   if (data!=null && !data.trim().equals("")) 
out.print(" FKTABLE_CAT='"+encode(data)+"'");

   data=rs.getString("FKTABLE_SCHEM"); if (data!=null && !data.trim().equals("")) 
out.print(" FKTABLE_SCHEM='"+encode(data)+"'");

   data=rs.getString("DEFERRABILITY"); if (data!=null && !data.trim().equals("")) 
out.print(" DEFERRABILITY='"+encode(data)+"'");

   data=rs.getString("UPDATE_RULE");   if (data!=null && !data.trim().equals("")) 
out.print(" UPDATE_RULE='"+encode(data)+"'");

   data=rs.getString("DELETE_RULE");   if (data!=null && !data.trim().equals("")) 
out.print(" DELETE_RULE='"+encode(data)+"'");



   out.println(">");



   rs.beforeFirst();



   while (rs.next())

   {

    out.print(ident+" <ikcolumn");



    data=rs.getString("PKCOLUMN_NAME"); if (data!=null && !data.trim().equals("")) 
out.print(" PKCOLUMN_NAME='"+encode(data)+"'");

    data=rs.getString("PKCOLUMN_NAME");           if (data!=null && 
!data.trim().equals(""))

    {

     String f=data.substring(0,1).toUpperCase();

     String l=data.substring(1);

     data=f+l;

     out.print(" pkcolumnNameHacked='"+encode(data)+"'");

    }

    data=rs.getString("FKCOLUMN_NAME"); if (data!=null && !data.trim().equals("")) 
out.print(" FKCOLUMN_NAME='"+encode(data)+"'");

    data=rs.getString("FKCOLUMN_NAME");           if (data!=null && 
!data.trim().equals(""))

    {

     String f=data.substring(0,1).toUpperCase();

     String l=data.substring(1);

     data=f+l;

     out.print(" fkcolumnNameHacked='"+encode(data)+"'");

    }

    data=rs.getString("KEY_SEQ");       if (data!=null && !data.trim().equals("")) 
out.print(" KEY_SEQ='"+encode(data)+"'");



    out.println("/>");

   }

   out.println(ident+"</ik>");

  }

  rs.close();

 }



 public static void dumpDatabaseMetaData(String ident, DatabaseMetaData dmd, 
PrintStream out) throws Throwable

 {

  out.println("<?xml version='1.0'?>");

  out.println("<!DOCTYPE greeting SYSTEM 'DatabaseMetaData.dtd'>");



  out.print(ident+"<databaseMetaData");



  String data;



  data=dmd.getURL();                    if (data!=null && !data.trim().equals("")) 
out.print(" URL='"+encode(data)+"'");

  data=dmd.getDatabaseProductName();    if (data!=null && !data.trim().equals("")) 
out.print(" databaseProductName='"+encode(data)+"'");

  data=dmd.getDatabaseProductVersion(); if (data!=null && !data.trim().equals("")) 
out.print(" databaseProductVersion='"+encode(data)+"'");

  data=dmd.getDriverName();             if (data!=null && !data.trim().equals("")) 
out.print(" driverName='"+encode(data)+"'");

  data=dmd.getDriverVersion();          if (data!=null && !data.trim().equals("")) 
out.print(" driverVersion='"+encode(data)+"'");



  out.println(">");



  dumpCatalogs(ident+" ",dmd,out);

  dumpSchemas(ident+" ",dmd,out);

  dumpTables(ident+" ",dmd,out);



  out.println(ident+"</databaseMetaData>");

 }



 public static void main(String[] args) throws Throwable

 {

  if (args.length==0)

  {

   System.err.println("usage: java [-Djdbc.drivers=path:path:path] DumpDatabase url 
[user [pass]]");

   return;

  }

  Connection 
C=DriverManager.getConnection(args[0],args.length>1?args[1]:null,args.length>2?args[2]:null);

  DatabaseMetaData dmd=C.getMetaData();

  dumpDatabaseMetaData("", dmd,System.out);

  C.close();

 }

}
<!-- (c) 2003 Pyerotechnics Development, Inc. -->

<!ELEMENT databaseMetaData (catalogs,schemas,tables)>
<!ATTLIST databaseMetaData URL CDATA #IMPLIED>
<!ATTLIST databaseMetaData databaseProductName CDATA #IMPLIED>
<!ATTLIST databaseMetaData databaseProductVersion CDATA #IMPLIED>
<!ATTLIST databaseMetaData driverName CDATA #IMPLIED>
<!ATTLIST databaseMetaData driverVersion CDATA #IMPLIED>

<!ELEMENT catalogs (catalog*)>

<!ELEMENT catalog EMPTY >
<!ATTLIST catalog TABLE_CAT CDATA #REQUIRED>

<!ELEMENT schemas (schema*)>

<!ELEMENT schema EMPTY>
<!ATTLIST schema TABLE_SCHEM CDATA #REQUIRED>

<!ELEMENT tables (table*)>
<!ELEMENT table (columns+, indicies*, keys?)>
<!ATTLIST table TABLE_NAME CDATA #REQUIRED>
<!ATTLIST table TABLE_CAT CDATA #IMPLIED>
<!ATTLIST table TABLE_SCHEM CDATA #IMPLIED>
<!ATTLIST table TABLE_TYPE CDATA #IMPLIED>
<!ATTLIST table REMARKS CDATA #IMPLIED>

<!ELEMENT columns (column+)>

<!ELEMENT column EMPTY>
<!ATTLIST column COLUMN_NAME CDATA #REQUIRED>
<!ATTLIST column columnNameHacked CDATA #REQUIRED>
<!ATTLIST column DATA_TYPE CDATA #REQUIRED>
<!ATTLIST column TYPE_NAME CDATA #REQUIRED>
<!ATTLIST column NULLABLE CDATA #REQUIRED>
<!ATTLIST column SQL_DATA_TYPE CDATA #REQUIRED>
<!ATTLIST column SQL_DATETIME_SUB CDATA #REQUIRED>
<!ATTLIST column COLUMN_SIZE CDATA #IMPLIED>
<!ATTLIST column BUFFER_LENGTH CDATA #IMPLIED>
<!ATTLIST column DECIMAL_DIGITS CDATA #IMPLIED>
<!ATTLIST column NUM_PREC_RADIX CDATA #IMPLIED>
<!ATTLIST column REMARKS CDATA #IMPLIED>
<!ATTLIST column COLUMN_DEF CDATA #IMPLIED>
<!ATTLIST column REMARKS CDATA #IMPLIED>
<!ATTLIST column CHAR_OCTET_LENGTH CDATA #IMPLIED>
<!ATTLIST column ORDINAL_POSITION CDATA #IMPLIED>
<!ATTLIST column IS_NULLABLE CDATA #IMPLIED>
<!ATTLIST column primitiveType CDATA #IMPLIED>
<!ATTLIST column objectType CDATA #IMPLIED>
<!ATTLIST column sqlType CDATA #IMPLIED>

<!ELEMENT indicies (index*)>

<!ELEMENT index (indexcolumn+)>
<!ATTLIST index INDEX_NAME CDATA #REQUIRED>
<!ATTLIST index NON_UNIQUE CDATA #REQUIRED>
<!ATTLIST index TYPE CDATA #REQUIRED>
<!ATTLIST index INDEX_QUALIFIER CDATA #IMPLIED>
<!ATTLIST index PAGES CDATA #IMPLIED>
<!ATTLIST index FILTER_CONDITION CDATA #IMPLIED>

<!ELEMENT indexcolumn EMPTY>
<!ATTLIST indexcolumn COLUMN_NAME CDATA #REQUIRED>
<!ATTLIST indexcolumn columnNameHacked CDATA #REQUIRED>
<!ATTLIST indexcolumn ORDINAL_POSITION CDATA #IMPLIED>
<!ATTLIST indexcolumn CARDINALITY CDATA #IMPLIED>
<!ATTLIST indexcolumn ASC_OR_DESC CDATA #IMPLIED>

<!ELEMENT keys (pk?,fk*,ik*)>

<!ELEMENT pk (pkcolumn+)>
<!ATTLIST pk PK_NAME CDATA #IMPLIED>

<!ELEMENT pkcolumn EMPTY>
<!ATTLIST pkcolumn COLUMN_NAME CDATA #REQUIRED>
<!ATTLIST pkcolumn columnNameHacked CDATA #REQUIRED>
<!ATTLIST pkcolumn KEY_SEQ CDATA #REQUIRED>

<!ELEMENT fk (fkcolumn+)>
<!ATTLIST fk PKTABLE_NAME CDATA #REQUIRED>

<!ATTLIST fk PKTABLE_CAT CDATA #IMPLIED>
<!ATTLIST fk PKTABLE_SCHEM CDATA #IMPLIED>
<!ATTLIST fk FK_NAME CDATA #IMPLIED>
<!ATTLIST fk PK_NAME CDATA #IMPLIED>
<!ATTLIST fk DEFERRABILITY CDATA #IMPLIED>
<!ATTLIST fk UPDATE_RULE CDATA #IMPLIED>
<!ATTLIST fk DELETE_RULE CDATA #IMPLIED>

<!ELEMENT fkcolumn EMPTY>
<!ATTLIST fkcolumn PKCOLUMN_NAME CDATA #REQUIRED>
<!ATTLIST fkcolumn pkcolumnNameHacked CDATA #REQUIRED>
<!ATTLIST fkcolumn FKCOLUMN_NAME CDATA #REQUIRED>
<!ATTLIST fkcolumn fkcolumnNameHacked CDATA #REQUIRED>
<!ATTLIST fkcolumn KEY_SEQ CDATA #REQUIRED>

<!ELEMENT ik (ikcolumn+)>
<!ATTLIST ik FKTABLE_NAME CDATA #REQUIRED>

<!ATTLIST ik FKTABLE_CAT CDATA #IMPLIED>
<!ATTLIST ik FKTABLE_SCHEM CDATA #IMPLIED>
<!ATTLIST ik FK_NAME CDATA #IMPLIED>
<!ATTLIST ik PK_NAME CDATA #IMPLIED>
<!ATTLIST ik DEFERRABILITY CDATA #IMPLIED>
<!ATTLIST ik UPDATE_RULE CDATA #IMPLIED>
<!ATTLIST ik DELETE_RULE CDATA #IMPLIED>

<!ELEMENT ikcolumn EMPTY>
<!ATTLIST ikcolumn PKCOLUMN_NAME CDATA #REQUIRED>
<!ATTLIST ikcolumn pkcolumnNameHacked CDATA #REQUIRED>
<!ATTLIST ikcolumn FKCOLUMN_NAME CDATA #REQUIRED>
<!ATTLIST ikcolumn fkcolumnNameHacked CDATA #REQUIRED>
<!ATTLIST ikcolumn KEY_SEQ CDATA #REQUIRED>

<?xml version="1.0"?>
<!-- (c) 2003 Pyerotechnics Development, Inc. -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
 <xsl:output method="text"/>
 <xsl:template match="/">
  <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="tables">
  <xsl:for-each select="table">
  public class <xsl:value-of select="@TABLE_NAME"/>
  {
   <xsl:for-each select="columns/column">
    <xsl:if test="@NULLABLE=1">
   private <xsl:value-of select="@objectType"/> <xsl:text> </xsl:text><xsl:value-of select="@COLUMN_NAME"/>;

   public <xsl:value-of select="@objectType"/> get<xsl:value-of select="@columnNameHacked"/>()
   {
    return this.<xsl:value-of select="@COLUMN_NAME"/>;
   }

   public void set<xsl:value-of select="@columnNameHacked"/>(<xsl:value-of select="@objectType"/> <xsl:text> </xsl:text><xsl:value-of select="@COLUMN_NAME"/>)
   {
    this.<xsl:value-of select="@COLUMN_NAME"/> = <xsl:value-of select="@COLUMN_NAME"/>;
   }
    </xsl:if>
    <xsl:if test="@NULLABLE=0">
   private <xsl:value-of select="@primitiveType"/> <xsl:text> </xsl:text><xsl:value-of select="@COLUMN_NAME"/>;

   public <xsl:value-of select="@primitiveType"/> get<xsl:value-of select="@columnNameHacked"/>()
   {
    return this.<xsl:value-of select="@COLUMN_NAME"/>;
   }

   public void set<xsl:value-of select="@columnNameHacked"/>(<xsl:value-of select="@primitiveType"/><xsl:text> </xsl:text><xsl:value-of select="@COLUMN_NAME"/>)
   {
    this.<xsl:value-of select="@COLUMN_NAME"/> = <xsl:value-of select="@COLUMN_NAME"/>;
   }
    </xsl:if>
   </xsl:for-each>

   <xsl:for-each select="keys/fk/fkcolumn">
   // Foreign Keys ...
   private <xsl:value-of select="../@PKTABLE_NAME"/> <xsl:text> </xsl:text><xsl:value-of select="@FKCOLUMN_NAME"/>Obj;

   public <xsl:value-of select="../@PKTABLE_NAME"/> get<xsl:value-of select="@fkcolumnNameHacked"/>Obj()
   {
    return this.<xsl:value-of select="@FKCOLUMN_NAME"/>Obj;
   }

   public <xsl:value-of select="../@PKTABLE_NAME"/> set<xsl:value-of select="@fkcolumnNameHacked"/>Obj(<xsl:value-of select="../@PKTABLE_NAME"/><xsl:text> </xsl:text> <xsl:value-of select="@FKCOLUMN_NAME"/>Obj)
   {
    this.<xsl:value-of select="@FKCOLUMN_NAME"/>Obj = <xsl:value-of select="@FKCOLUMN_NAME"/>Obj;
   }
   </xsl:for-each>

   <xsl:for-each select="keys/ik/ikcolumn">
   // Inverse Foreign Keys ...
   private java.util.Collection <xsl:text> </xsl:text><xsl:value-of select="@FKCOLUMN_NAME"/>Collection;

   public java.util.Collection get<xsl:value-of select="@fkcolumnNameHacked"/>Collection()
   {
    return this.<xsl:value-of select="@FKCOLUMN_NAME"/>Collection;
   }

   public java.util.Collection set<xsl:value-of select="@fkcolumnNameHacked"/>Collection(java.util.Collection<xsl:text> </xsl:text> <xsl:value-of select="@FKCOLUMN_NAME"/>Collection)
   {
    this.<xsl:value-of select="@FKCOLUMN_NAME"/>Collection = <xsl:value-of select="@FKCOLUMN_NAME"/>Collection;
   }
   </xsl:for-each>
  }
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

Attachment: classes.txt.gz
Description: some generated class contents...

Attachment: example.xml.gz
Description: Example Results

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to