Я использую JDBC для очень простой связи с базой данных.
Я создал свой оператор connection/и выполнил запрос. Я проверяю объект запроса инструкции в отладчике, чтобы подтвердить, что он отправляет правильный запрос. Затем я дважды проверял запрос (скопированный прямо из отладчика) в базе данных, чтобы убедиться, что он возвращает данные. Однако возвращенный набор результатов дает значение false.next()
Есть ли здесь какие-то общие ошибки, которые мне не хватает?
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;
}
}
И класс myDB (простая оболочка, которая позволяет мне удалить код соединения/оператора в любой проект)
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: Основываясь на предложениях, я в основном обновил свой код, но все еще имею ту же проблему. Ниже приведена упрощенная часть кода, которая имеет ту же проблему.
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;
}
}
Я также жестко запросил запрос на устранение этого источника ошибки. Та же проблема, что и раньше (это происходит со всеми запросами). Отладчик показывает все объекты, получающие экземпляр, и трассировки стека не печатаются. Кроме того, я могу использовать один и тот же код (и более сложный код, указанный ранее) в другом проекте.