482 lines
12 KiB
Java
482 lines
12 KiB
Java
package com.tarisan.generador.oracle;
|
|
|
|
|
|
import com.tarisan.generador.Tabla;
|
|
import com.tarisan.generador.Campo;
|
|
import com.tarisan.generador.Registro;
|
|
import com.tarisan.generador.Dato;
|
|
import com.tarisan.generador.UtilidadesGeneradorBD;
|
|
import com.tarisan.generador.ObtenerTablasBD;
|
|
|
|
import java.util.Vector;
|
|
import java.sql.*;
|
|
|
|
public class ObtenerTablasBDOracle
|
|
{
|
|
|
|
/**
|
|
Conexión a Oracle
|
|
*/
|
|
private Connection conn;
|
|
|
|
|
|
/**
|
|
* constructor de la clase
|
|
*/
|
|
public ObtenerTablasBDOracle(Connection newConn)
|
|
{
|
|
conn = newConn;
|
|
}
|
|
|
|
|
|
/**
|
|
* metodo que ,dado un array de Strings con los nombres de
|
|
* las tablas devuelve un vector de objetos Tabla
|
|
*/
|
|
public Vector getTablasBD(String[] nombresTabla, int tipo)
|
|
{
|
|
Vector vectorTablas = new Vector();
|
|
Statement stmt = null;
|
|
|
|
try
|
|
{
|
|
stmt = conn.createStatement();
|
|
switch(tipo)
|
|
{
|
|
case ObtenerTablasBD.JAVA:
|
|
{
|
|
vectorTablas = getEstructura(nombresTabla, stmt);
|
|
break;
|
|
}
|
|
case ObtenerTablasBD.XML:
|
|
{
|
|
vectorTablas = getEstructura(nombresTabla, stmt);
|
|
break;
|
|
}
|
|
case ObtenerTablasBD.DATOS_XML:
|
|
{
|
|
vectorTablas = getValores(nombresTabla, stmt);
|
|
break;
|
|
}
|
|
case ObtenerTablasBD.DOC:
|
|
{
|
|
vectorTablas = getEstructura(nombresTabla, stmt);
|
|
break;
|
|
}
|
|
case ObtenerTablasBD.SQL:
|
|
{
|
|
vectorTablas = getEstructura(nombresTabla, stmt);
|
|
break;
|
|
}
|
|
case ObtenerTablasBD.HTML:
|
|
{
|
|
vectorTablas = getEstructura(nombresTabla, stmt);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
System.err.println(e);
|
|
}
|
|
|
|
//devuelvo el vector de tablas
|
|
vectorTablas.trimToSize();
|
|
return vectorTablas;
|
|
}
|
|
|
|
|
|
private Vector getEstructura(String[] nombresTabla, Statement stmt) throws Exception
|
|
{
|
|
//Voy a ir recorriendo las tablas de la BD y sus correspondientes campos
|
|
Tabla tabla;
|
|
String nombre, nombreOriginal;
|
|
Vector vectorCampos = null, vectorKeys = null;
|
|
Vector vectorTablas = new Vector();
|
|
ResultSet rs = null,rsPKeys = null;
|
|
ResultSetMetaData rsMetaData = null;
|
|
Campo campo;
|
|
|
|
for (int k=0; k < nombresTabla.length ; k++)
|
|
{
|
|
tabla = new Tabla();
|
|
vectorCampos = new Vector();
|
|
|
|
// nombre original de la tabla
|
|
nombreOriginal = nombresTabla[k];
|
|
tabla.setNombreOriginal(nombreOriginal);
|
|
|
|
//nombre de la tabla / del javabean
|
|
nombre = UtilidadesGeneradorBD.getNombreTabla( nombreOriginal );
|
|
tabla.setNombre(nombre);
|
|
|
|
|
|
//Columnas que son clave primaria
|
|
vectorKeys = new Vector();
|
|
String[] keyColumns = null;
|
|
|
|
StringBuffer queryPKeys = new StringBuffer();
|
|
queryPKeys.append("SELECT USER_CONS_COLUMNS.COLUMN_NAME");
|
|
queryPKeys.append(", USER_CONSTRAINTS.CONSTRAINT_NAME");
|
|
queryPKeys.append(", TAB.TABTYPE");
|
|
queryPKeys.append(" FROM USER_CONS_COLUMNS, USER_CONSTRAINTS, TAB");
|
|
queryPKeys.append(" WHERE USER_CONS_COLUMNS.TABLE_NAME = '" +nombreOriginal+ "'");
|
|
queryPKeys.append(" AND USER_CONSTRAINTS.CONSTRAINT_TYPE = 'P'");
|
|
queryPKeys.append(" AND USER_CONSTRAINTS.CONSTRAINT_NAME = USER_CONS_COLUMNS.CONSTRAINT_NAME");
|
|
queryPKeys.append(" AND USER_CONSTRAINTS.TABLE_NAME = TAB.TNAME");
|
|
queryPKeys.append(" ORDER BY USER_CONS_COLUMNS.POSITION");
|
|
|
|
String nombrePKey = "";
|
|
String tipoTabla = "";
|
|
|
|
rsPKeys = stmt.executeQuery(queryPKeys.toString());
|
|
while(rsPKeys.next())
|
|
{
|
|
// vectorKeys.addElement(rsPKeys.getString("COLUMN_NAME"));
|
|
vectorKeys.addElement(rsPKeys.getString(1));
|
|
nombrePKey = rsPKeys.getString(2);
|
|
tipoTabla = rsPKeys.getString(3);
|
|
}
|
|
vectorKeys.trimToSize();
|
|
keyColumns = new String[ vectorKeys.size() ];
|
|
vectorKeys.copyInto( keyColumns );
|
|
|
|
//Tipo de la tabla oracle (tabla o vista)
|
|
tabla.setTipoTabla(tipoTabla);
|
|
|
|
//Tomo todos los campos de esta tabla
|
|
rs = stmt.executeQuery("SELECT * FROM "+ nombreOriginal );
|
|
rsMetaData = rs.getMetaData();
|
|
|
|
|
|
//empiezo a recorrer los campos de la tabla
|
|
for (int i = 1 ; i <= rsMetaData.getColumnCount() ; i++)
|
|
{
|
|
campo = new Campo();
|
|
|
|
// Nombre original del campo
|
|
String nombreOriginalCampo = rsMetaData.getColumnName(i);
|
|
campo.setNombreOriginal( nombreOriginalCampo );
|
|
|
|
|
|
//Nombre del campo (es decir, de la propiedad del bean)
|
|
campo.setNombre( UtilidadesGeneradorBD.getNombreCampo( nombreOriginalCampo ));
|
|
|
|
|
|
// tipo (java) de campo y largo segun tipo
|
|
String tipoOracle = rsMetaData.getColumnTypeName(i);
|
|
tipoOracle.trim();
|
|
tipoOracle.toUpperCase();
|
|
|
|
if( tipoOracle.equals("CHAR"))
|
|
{
|
|
campo.setLongitudOracle(String.valueOf(rsMetaData.getColumnDisplaySize(i)));
|
|
campo.setTipoOracle("CHAR");
|
|
campo.setTipo("String");
|
|
campo.setLargo( rsMetaData.getColumnDisplaySize(i) );
|
|
}
|
|
else if(tipoOracle.equals("CHARACTER"))
|
|
{
|
|
campo.setLongitudOracle(String.valueOf(rsMetaData.getColumnDisplaySize(i)));
|
|
campo.setTipoOracle("CHARACTER");
|
|
campo.setTipo("String");
|
|
campo.setLargo( rsMetaData.getColumnDisplaySize(i) );
|
|
}
|
|
else if( tipoOracle.equals("DATE") )
|
|
{
|
|
campo.setLongitudOracle("");
|
|
campo.setTipoOracle("DATE");
|
|
campo.setTipo("java.sql.Date");
|
|
campo.setLargo( rsMetaData.getColumnDisplaySize(i) );
|
|
|
|
}
|
|
else if( tipoOracle.equals("LONG") )
|
|
{
|
|
//como tipo memo
|
|
campo.setLongitudOracle("");
|
|
campo.setTipoOracle("LONG");
|
|
}
|
|
else if( tipoOracle.equals("LONG RAW") )
|
|
{
|
|
campo.setLongitudOracle("");
|
|
campo.setTipoOracle("LONG RAW");
|
|
campo.setTipo("long");
|
|
}
|
|
else if( tipoOracle.equals("MLSLABEL") )
|
|
{
|
|
//no se que es esto
|
|
campo.setLongitudOracle("");
|
|
campo.setTipoOracle("MLSLABEL");
|
|
}
|
|
else if( tipoOracle.equals("NUMBER") )
|
|
{
|
|
campo.setLongitudOracle(String.valueOf(rsMetaData.getPrecision(i)));
|
|
if (rsMetaData.getScale(i) > 0)
|
|
{
|
|
campo.setLongitudOracle(campo.getLongitudOracle() + "," + String.valueOf(rsMetaData.getScale(i)));
|
|
}
|
|
campo.setTipoOracle("NUMBER");
|
|
// campo.setScale( rsMetaData.getScale(i) );
|
|
// campo.setPrecision( rsMetaData.getPrecision(i) );
|
|
if(rsMetaData.getScale(i) != 0)
|
|
{
|
|
campo.setTipo("double");
|
|
}
|
|
else
|
|
{
|
|
if(rsMetaData.getPrecision(i) == 0)
|
|
{
|
|
campo.setTipo("double");
|
|
}
|
|
else
|
|
{
|
|
if(rsMetaData.getPrecision(i) < 10)
|
|
{
|
|
campo.setTipo("int");
|
|
}
|
|
else
|
|
{
|
|
//campo.setTipo("long");
|
|
campo.setTipo("double");
|
|
}
|
|
}
|
|
}
|
|
campo.setLargo(rsMetaData.getColumnDisplaySize(i));
|
|
}
|
|
else if( tipoOracle.equals("RAW") )
|
|
{
|
|
//no se que es esto
|
|
campo.setLongitudOracle("");
|
|
campo.setTipoOracle("RAW");
|
|
}
|
|
else if( tipoOracle.equals("RAW MLSLABEL") )
|
|
{
|
|
//no se que es esto
|
|
campo.setLongitudOracle("");
|
|
campo.setTipoOracle("RAW MLSLABEL");
|
|
}
|
|
else if( tipoOracle.equals("ROWID") )
|
|
{
|
|
//no se que es esto
|
|
campo.setLongitudOracle("");
|
|
campo.setTipoOracle("ROWID");
|
|
}
|
|
else if(tipoOracle.equals("VARCHAR2"))
|
|
{
|
|
campo.setLongitudOracle(String.valueOf(rsMetaData.getColumnDisplaySize(i)));
|
|
campo.setTipoOracle("VARCHAR2");
|
|
campo.setTipo("String");
|
|
campo.setLargo( rsMetaData.getColumnDisplaySize(i) );
|
|
}
|
|
else if(tipoOracle.equals("VARCHAR"))
|
|
{
|
|
campo.setLongitudOracle(String.valueOf(rsMetaData.getColumnDisplaySize(i)));
|
|
campo.setTipoOracle("VARCHAR");
|
|
campo.setTipo("String");
|
|
campo.setLargo( rsMetaData.getColumnDisplaySize(i) );
|
|
}
|
|
|
|
// Campo requerido o no
|
|
if( rsMetaData.isNullable(i) == 0)
|
|
campo.setRequerido( true );
|
|
else
|
|
campo.setRequerido( false );
|
|
|
|
|
|
// campo primay key o no
|
|
for( int j = 0; j < keyColumns.length; j++)
|
|
{
|
|
if( (campo.getNombreOriginal()).equals(keyColumns[j]))
|
|
{
|
|
campo.setClave( true );
|
|
campo.setClaveOracle(nombrePKey + " (" + String.valueOf(j+1) + "º)");
|
|
break;
|
|
}
|
|
}
|
|
|
|
// añado el campo al vector de campos
|
|
vectorCampos.addElement(campo);
|
|
|
|
|
|
}//fin del for de campos
|
|
|
|
//añado la tabla al vector de tablas
|
|
tabla.setCampos(vectorCampos);
|
|
vectorTablas.addElement(tabla);
|
|
|
|
}//fin del for de tablas
|
|
|
|
return vectorTablas;
|
|
}
|
|
|
|
private Vector getValores(String[] nombresTabla, Statement stmt) throws Exception
|
|
{
|
|
//Voy a ir recorriendo las tablas de la BD y sus correspondientes campos
|
|
Registro registro;
|
|
String nombre, nombreOriginal;
|
|
Vector vectorDatos = null;
|
|
Vector vectorRegistros = new Vector();
|
|
Dato dato;
|
|
String nombreOriginalDato;
|
|
ResultSet rs = null;
|
|
ResultSetMetaData rsMetaData = null;
|
|
String tipoOracle;
|
|
|
|
for (int k=0; k < nombresTabla.length ; k++)
|
|
{
|
|
// nombre original de la tabla
|
|
nombreOriginal = nombresTabla[k];
|
|
|
|
//Tomo todos los campos de esta tabla
|
|
rs = stmt.executeQuery("SELECT * FROM " + nombreOriginal );
|
|
rsMetaData = rs.getMetaData();
|
|
|
|
//Empiezo a recorrer los registros de datos de la tabla
|
|
while(rs.next())
|
|
{
|
|
registro = new Registro();
|
|
vectorDatos = new Vector();
|
|
|
|
registro.setNombreOriginal( nombreOriginal );
|
|
|
|
//nombre de la tabla / del javabean
|
|
nombre = UtilidadesGeneradorBD.getNombreTabla( nombreOriginal );
|
|
registro.setNombre( nombre );
|
|
|
|
for(int i = 1; i <= rsMetaData.getColumnCount(); i++)
|
|
{
|
|
dato = new Dato();
|
|
|
|
nombreOriginalDato = rsMetaData.getColumnName(i);
|
|
dato.setNombreOriginal( nombreOriginalDato );
|
|
|
|
//Nombre del campo (es decir, de la propiedad del bean)
|
|
dato.setNombre( UtilidadesGeneradorBD.getNombreCampo( nombreOriginalDato ));
|
|
|
|
//Valor del campo
|
|
dato.setValor(rs.getString(i));
|
|
|
|
//Tipo(java) de campo
|
|
tipoOracle = rsMetaData.getColumnTypeName(i).trim().toUpperCase();
|
|
if( tipoOracle.equals("CHAR") || tipoOracle.equals("CHARACTER") )
|
|
{
|
|
dato.setClase("Character");
|
|
}
|
|
else if( tipoOracle.equals("DATE") )
|
|
{
|
|
dato.setClase("java.sql.Date");
|
|
dato.setValor(UtilidadesGeneradorBD.formatearFecha((String)dato.getValor()));
|
|
}
|
|
else if( tipoOracle.equals("LONG") )
|
|
{
|
|
//como tipo memo
|
|
}
|
|
else if( tipoOracle.equals("LONG RAW") )
|
|
{
|
|
dato.setClase("Long");
|
|
}
|
|
else if( tipoOracle.equals("MLSLABEL") )
|
|
{
|
|
//no se que es esto
|
|
}
|
|
else if( tipoOracle.equals("NUMBER") )
|
|
{
|
|
if(rsMetaData.getScale(i) != 0)
|
|
{
|
|
dato.setClase("Double");
|
|
}
|
|
else
|
|
{
|
|
if(rsMetaData.getPrecision(i) == 0)
|
|
{
|
|
dato.setClase("Double");
|
|
}
|
|
else
|
|
{
|
|
if(rsMetaData.getPrecision(i) < 10)
|
|
{
|
|
dato.setClase("Integer");
|
|
}
|
|
else
|
|
{
|
|
//dato.setClase("Long");
|
|
dato.setClase("Double");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if( tipoOracle.equals("RAW") )
|
|
{
|
|
//no se que es esto
|
|
}
|
|
else if( tipoOracle.equals("RAW MLSLABEL") )
|
|
{
|
|
//no se que es esto
|
|
}
|
|
else if( tipoOracle.equals("ROWID") )
|
|
{
|
|
//no se que es esto
|
|
}
|
|
else if( tipoOracle.equals("VARCHAR2") || tipoOracle.equals("VARCHAR"))
|
|
{
|
|
dato.setClase("String");
|
|
}
|
|
|
|
// añado el dato al vector de datos
|
|
vectorDatos.addElement(dato);
|
|
}//fin del for de registros
|
|
|
|
//añado la tabla al vector de registros
|
|
registro.setDatos(vectorDatos);
|
|
vectorRegistros.addElement(registro);
|
|
}
|
|
|
|
}//fin del for de tablas
|
|
|
|
return vectorRegistros;
|
|
}
|
|
|
|
/**
|
|
* Accede a la BD y devuelve los nombres de todas las tablas
|
|
*/
|
|
public String[] getNombresAllTablasBD()
|
|
{
|
|
String[] resultado = null;
|
|
Vector vectorNombres = new Vector();
|
|
|
|
//Busco los nombres de las tablas de la BD
|
|
Statement stmt;
|
|
ResultSet rs;
|
|
try
|
|
{
|
|
//tomo los nombres de la tabla
|
|
stmt = conn.createStatement();
|
|
// rs = stmt.executeQuery( "SELECT TABLE_NAME FROM USER_TABLES" );
|
|
rs = stmt.executeQuery( "SELECT TNAME FROM TAB" );
|
|
while(rs.next())
|
|
{
|
|
// vectorNombres.addElement( rs.getString("TABLE_NAME") );
|
|
vectorNombres.addElement( rs.getString("TNAME") );
|
|
}
|
|
|
|
// Copio los elementos del vector en el array
|
|
vectorNombres.trimToSize();
|
|
resultado = new String[ vectorNombres.size() ];
|
|
vectorNombres.copyInto(resultado);
|
|
|
|
}
|
|
catch(SQLException sqle)
|
|
{
|
|
System.err.println( sqle );
|
|
}
|
|
|
|
//devuelvo el resultado
|
|
return resultado;
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|