bloque try catch y conexion JDBC
Buenas a todos.
Tengo la siguiente duda de la utilizacion del try catch, a ver si me lo pueden aclarar:
Primero creo una conexion JDBC y luego hago un select.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:khro","usuario","contraseña");
Statement sentencia = conn.createStatement();
try
{
ResultSet res = sentencia.executeQuery("select * from cuac");
}
... //codigo para tratar el select
conn.commit();
catch (SQLException e)
{
conn.rollback();
System.out.println("SQLCODE: " + e.getErrorCode());
System.out.println("SQLSTATE: " + e.getSQLState());
System.out.println("Error: " + e.getMessage());
}
catch (Exception ex)
{
conn.rollback();
System.out.println("Error: " + ex.getMessage());
}
finally
{
conn.close();
}
Esto es lo ke me dicta la logica. En caso de un error SQL o cualquier otro error, en el bloque catch hago un rollback (deshago la transaccion) y en el bloque finally hago un close, para cerrar la conexion, halla o no error.
Lo que kiero controlar es si hay un error en la conexion poniendo el try al principio de todo:
try
{
Connection conn = DriverManager.getConnection ("jdbc:odbc:khro","usuario","contraseña");
Statement sentencia = conn.createStatement();
} //blabla...
cuando hago esto, el compilador me dice que dentro de los bloques catch y finally no reconoce los simbolos conn, lo que me sugiere es que el ambito de dicho simbolo esta solamente del bloque try y por lo tanto, no se me ocurre como poder controlar un error en la conexion y, a la vez, en caso de un SQL error mas abajo hacer un rollback cuando sea necesario
Alguna idea?
Muchas gracias
Tengo la siguiente duda de la utilizacion del try catch, a ver si me lo pueden aclarar:
Primero creo una conexion JDBC y luego hago un select.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:khro","usuario","contraseña");
Statement sentencia = conn.createStatement();
try
{
ResultSet res = sentencia.executeQuery("select * from cuac");
}
... //codigo para tratar el select
conn.commit();
catch (SQLException e)
{
conn.rollback();
System.out.println("SQLCODE: " + e.getErrorCode());
System.out.println("SQLSTATE: " + e.getSQLState());
System.out.println("Error: " + e.getMessage());
}
catch (Exception ex)
{
conn.rollback();
System.out.println("Error: " + ex.getMessage());
}
finally
{
conn.close();
}
Esto es lo ke me dicta la logica. En caso de un error SQL o cualquier otro error, en el bloque catch hago un rollback (deshago la transaccion) y en el bloque finally hago un close, para cerrar la conexion, halla o no error.
Lo que kiero controlar es si hay un error en la conexion poniendo el try al principio de todo:
try
{
Connection conn = DriverManager.getConnection ("jdbc:odbc:khro","usuario","contraseña");
Statement sentencia = conn.createStatement();
} //blabla...
cuando hago esto, el compilador me dice que dentro de los bloques catch y finally no reconoce los simbolos conn, lo que me sugiere es que el ambito de dicho simbolo esta solamente del bloque try y por lo tanto, no se me ocurre como poder controlar un error en la conexion y, a la vez, en caso de un SQL error mas abajo hacer un rollback cuando sea necesario
Alguna idea?
Muchas gracias
Ambito de variables: Si defines una variable en un bloque, es visible unicamente en ese bloque, por lo que si defines la variable conn dentro de un try&catch, solo la podras utilizar en ese bloque.
Solucion:
Connection conn = null;
try {
Abrir conexion
} catch (...) { tratamiento error}
if (conn != null) {
try {
Ejecutamos query
} catch (..) {tratamiento error y rollback}
}
Solucion:
Connection conn = null;
try {
Abrir conexion
} catch (...) { tratamiento error}
if (conn != null) {
try {
Ejecutamos query
} catch (..) {tratamiento error y rollback}
}