Estoy usando JDBC para una conectividad de base de datos muy simple.JDBC devolviendo el conjunto de resultados vacío
He creado mi conexión/declaración y he ejecutado una consulta. Compruebo el objeto de consulta de la instrucción en el depurador para confirmar que está enviando una consulta adecuada. Luego comprobé dos veces la consulta (copiada directamente del depurador) en la base de datos para asegurarme de que devuelve datos. El resultado devuelto, sin embargo, da falso en .next()
¿Hay algún error común aquí que me falta?
public List<InterestGroup> getGroups() {
myDB.sendQuery("select distinct group_name From group_members where
username='" + this.username + "'");
ResultSet results = myDB.getResults();
List<InterestGroup> returnList = new ArrayList<InterestGroup>();
try {
while (results.next()) {
returnList.add(new InterestGroup(results.getString("group_name"), myDB));
}
return returnList;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
Y la clase myDB (contenedor simple que me permite colocar el código de conexión/declaración en cualquier proyecto)
public void sendQuery(String query){
this.query = query;
try {
if(statement == null){
statement = connection.createStatement();
}
results = statement.executeQuery(query);
} catch (SQLException e) {
System.out.println(query);
currentError = e;
results = null;
printError(e, "querying");
}
}
public ResultSet getResults(){
return results;
}
EDIT: Sobre la base de las sugerencias sobre todo me he renovado mi código, pero todavía tienen la el mismo problema. A continuación se muestra una porción simplificada del código que tiene el mismo problema.
private boolean attemptLogin(String uName, String pWord) {
ResultSet results;
try{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
connection =DriverManager.getConnection(connectionString,user,password);
PreparedStatement statement = connection.prepareStatement("select username from users where username='testuser'");
results = statement.executeQuery();
if(results != null && results.next()){
System.out.println("found a result");
statement.close();
return true;
}
System.out.println("did not find a result");
statement.close();
return false;
}catch(SQLException e){
e.printStackTrace();
return false;
}
}
También he codificado la consulta realizada para eliminar esa fuente de error. Mismo problema que antes (esto sucede con todas las consultas). El depurador muestra todos los objetos que se crean instancias y no se imprimen trazas de pila. Además, puedo usar el mismo código (y el código más complicado enumerado anteriormente) en un proyecto diferente.
Por favor, publique su código. Sin el código, no hay suficiente información aquí para proporcionar una respuesta. – Asaph
Podría estar dentro de la función getResults, si pudieras publicar eso también ayudaría mucho. – Brains1994
lo siento, agregué eso también. – dpsthree