Java - Programa JDBC cuelga

 
Vista:

Programa JDBC cuelga

Publicado por Salva (1 intervención) el 21/10/2010 17:26:16
Buenas

Tengo una aplicacion que extrae datos de una BD mediante JDBC y vuelca el contenido a un fichero plano

Esta aplicacion es capaz de conectar contra informix y Oracle.

resulta que mi aplicacion contra informix hace su trabajo correctamente. El problema viene con Oracle cuando se encuentra con una tabla con muchos datos (unos 3 millones) el proceso de mi aplicacion empieza a crecer hasta que consume casi toda la memoria del equipo y se cuelga.

Cuando conecto a Infomix el codigo es el mismo y la tabla la misma, pero el proceso termina correctamente, asi que solo se me ocurre que tenga algo que ver el driver, uso el driver ojdbc4_g.jar

Alguna pista?? gracias

Este es parte del codigo que uso para descargar los datos

private boolean montaScript(String tabla, PrintStream out_file) {
boolean resultado = true;

String sql_cab = "INSERT INTO " + tabla + " (";
String sql;
ResultSet rs = null;
ResultSetMetaData rsmt = null;
String dato = "";
//Variables para lso tipos fecha

System.out.println("Generando: " + tabla);
Date fecha = null;
String mesTrans = "";
SimpleDateFormat mes = new SimpleDateFormat("MM");
SimpleDateFormat dia = new SimpleDateFormat("dd");
SimpleDateFormat anio = new SimpleDateFormat("yyyy");

try {

st = common.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = st.executeQuery("select * from " + tabla);
rsmt = rs.getMetaData();

//Monto la lista de tablas a insertar.
for (int i = 1; i <= rsmt.getColumnCount(); i++) {

sql_cab = sql_cab + rsmt.getColumnName(i).toLowerCase();

if (i == rsmt.getColumnCount()) {
sql_cab = sql_cab + ") VALUES( ";
} else {
sql_cab = sql_cab + ",";
}
}

rs.first();

if (rs.getRow() != 0) {
do {
sql = sql_cab;
for (int j = 1; j <= rsmt.getColumnCount(); j++) {

//Tipos de datos decimales
if (rsmt.getColumnType(j) == 2 || rsmt.getColumnType(j) == 3 || rsmt.getColumnType(j) == 6 || rsmt.getColumnType(j) == 8) {

dato = rs.getString(j);
if (!common.isNull(dato)) {
if (jComboBox5.getSelectedItem().toString().equals("Coma")) {
dato = dato.replace(".", ",");
} else {
dato = dato.replace(",", ".");
}
}
//Fecha
} else if (rsmt.getColumnType(j) == 91 || rsmt.getColumnType(j) == 93 || rsmt.getColumnType(j) == 92) {

fecha = rs.getDate(j);

if (fecha != null) {

if (jComboBox6.getSelectedItem().toString().equals("dd/mm/yyyy")) {
dato = dia.format(fecha) + "/" + mes.format(fecha) + "/" + anio.format(fecha);
} else if (jComboBox6.getSelectedItem().toString().equals("yyyy/mm/dd")) {
dato = anio.format(fecha) + "/" + mes.format(fecha) + "/" + dia.format(fecha);
} else {

if (mes.format(fecha).equals("01")) {
if (jComboBox6.getSelectedItem().toString().equals("ENG dd-mmm-yyyy")) {
mesTrans = "jan";
} else {
mesTrans = "ene";
}
} else if (mes.format(fecha).equals("02")) {
mesTrans = "feb";
} else if (mes.format(fecha).equals("03")) {
mesTrans = "mar";
} else if (mes.format(fecha).equals("04")) {
if (jComboBox6.getSelectedItem().toString().equals("ENG dd-mmm-yyyy")) {
mesTrans = "apr";
} else {
mesTrans = "abr";
}
} else if (mes.format(fecha).equals("05")) {
mesTrans = "may";
} else if (mes.format(fecha).equals("06")) {
mesTrans = "jun";
} else if (mes.format(fecha).equals("07")) {
mesTrans = "jul";
} else if (mes.format(fecha).equals("08")) {
if (jComboBox6.getSelectedItem().toString().equals("ENG dd-mmm-yyyy")) {
mesTrans = "aug";
} else {
mesTrans = "ago";
}
} else if (mes.format(fecha).equals("09")) {
mesTrans = "sep";
} else if (mes.format(fecha).equals("10")) {
mesTrans = "oct";
} else if (mes.format(fecha).equals("11")) {
mesTrans = "nov";
} else if (mes.format(fecha).equals("12")) {
if (jComboBox6.getSelectedItem().toString().equals("ENG dd-mmm-yyyy")) {
mesTrans = "dec";
} else {
mesTrans = "dic";
}
}

dato = dia.format(fecha) + "-" + mesTrans + "-" + anio.format(fecha);
}
} else {
dato = "";
}
} else {
dato = rs.getString(j);
}

if (common.isNull(dato)) {
sql = sql + "NULL";
} else {

sql = sql + "'" + dato.replace("'", " ").replace(";", " ") + "'";
}
if (j == rsmt.getColumnCount()) {
sql = sql + ");";
} else {
sql = sql + ",";
}
}

out_file.println(sql);

} while (rs.next());
}

rs.close();

} catch (SQLException ex) {
ex.printStackTrace();
}


return resultado;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder