estoy autentificar el usuario como¿Puedo utilizar la conexión JDBC misma, declaración y de resultados de ejecutar dos consultas en JDBC
public static boolean login(DataManager dataManager, String userName, String password) {
boolean authenticated = false;
Connection connection = dataManager.getConnection();
if (connection != null) {
try {
Statement s = connection.createStatement();
String sql = "query";
try {
ResultSet rs = s.executeQuery(sql);
try {
while (rs.next()) {
String group_code = rs.getString(1);
String orgaunit = rs.getString(2);
authenticated = true;
} //end of while()
} finally {
rs.close();
}
} finally {
s.close();
}
} catch(SQLException e) {
//System.out.println("Could not login from dataabse:" + e.getMessage());
} finally {
dataManager.putConnection(connection);
}
} //end of if (connection != null)
return authenticated;
} //end of login()
estoy cerrando la conexión en dataManager.putConnection(connection)
. Quiero pedirle al usuario que inicie sesión, luego tengo que actualizar el estado del usuario y mantener el historial de registro. ¿Puedo usar algo como esto
try {
Statement s = connection.createStatement();
String sql = "query";
try {
ResultSet rs = s.executeQuery(sql);
try {
while (rs.next()) {
String group_code = rs.getString(1);
authenticated = true;
} //end of while()
if (autherntcated == true) {
sql = "query2(update status)";
rs = s.executeQuery(sql);
while (rs.next()) {
//dos tuff
}
sql = "anotherQuery";
rs = s.executeQuery(sql);
while (rs.next()) {
//do stuff
}
}
} finally {
rs.close();
}
} finally {
s.close();
}
} catch(SQLException e) {
//System.out.println("Could not login from dataabse:" + e.getMessage());
} finally {
dataManager.putConnection(connection);
}
significa usar misma conexión, misma instrucción y la misma conjunto de resultados ejecutar otras consultas o se trata de un enfoque equivocado?
Gracias.
Editar ------------------------------------------- -------------------
if (connection != null) {
try {
String sql = "query";
PreparedStatement prepStatement = connection.prepareStatement(sql);
try {
ResultSet rs = prepStatement.executeQuery(sql);
try {
while (rs.next()) {
String group_code = rs.getString(1);
authenticated = true;
} //end of while()
} finally {
rs.close();
}
} finally {
prepStatement.close();
}
/// Addition
if (authenticated == true) {
updateUser(connection, userName);
}
} catch(SQLException e) {
//System.out.println("Could not login from dataabse:" + e.getMessage());
} finally {
dataManager.putConnection(connection);
}
} //end of if (connection != null)
método de actualización:
private static void updateUser(Connection connection, String userName) {
try {
String sql = "UPDATE users SET status_code = 'A' WHERE login_id = '" + userName + "'";
PreparedStatement prepStatement = connection.prepareStatement(sql);
try {
int numberOfRowsUpdated = prepStatement.executeUpdate(sql);
} finally {
prepStatement.close();
}
maintainHistory(connection);
} catch(SQLException e) {
//System.out.println("Could not login from dataabse:" + e.getMessage());
}
} //end of updateUser()
maintainHistory:
private static void maintainHistory(Connection connection) {
try {
String sql = "INSERT INTO auditlog_user_logins(user_code,logintime,prstid) VALUES();";
PreparedStatement prepStatement = connection.prepareStatement(sql);
try {
int numberOfRowsUpdated = prepStatement.executeUpdate(sql);
} finally {
prepStatement.close();
}
} catch(SQLException e) {
//System.out.println("Could not login from dataabse:" + e.getMessage());
}
} //end of maintainHistory()
Quiere decir que puedo cerrar Statement y ResultSet. Me refiero a que una vez que cierre el Statement y el ResultSet, use la actualización y otra consulta de la misma manera y luego cierre la conexión de la base de datos 'dataManager.putConnection (connection); '. ¿Lo es? – Basit
@Basit: actualicé mi respuesta para incluir más información. Lo ideal sería reutilizar su objeto * connection *. ResultSet no tiene sentido y como he especificado, sugiero pasar de * Statement * a * PreparedStatement * – Sujay
Al igual que cuando creo Statement 'Statement s = connection.createStatement();' entonces tengo que cerrarlo. ¿También necesito cerrar el Estado Preparado de la misma manera que lo estoy haciendo con el Estado de Cuenta? Primero estoy creando Statement using connection, luego obtengo 'ResultSet' utilizando' s.executeQuery (query) ', y luego recorro el conjunto de resultados. ¿Cómo puedo reemplazarlo con PreparedStatement? – Basit