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