Я использую JDBC для очень простой связи с базой данных.JDBC возвращает пустой набор результатов
Я создал свой оператор connection/statement и выполнил запрос. Я проверяю объект запроса инструкции в отладчике, чтобы подтвердить, что он отправляет правильный запрос. Затем я дважды проверил запрос (скопированный прямо из отладчика) в базу данных, чтобы убедиться, что он возвращает данные. Возвращенный результирующий набор, однако, дает значение 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;
}
}
Я также жестко запросил запрос на устранение этого источника ошибки. Та же проблема, что и раньше (это происходит со всеми запросами). Отладчик показывает все объекты, получающие экземпляр, и трассировки стека не печатаются. Кроме того, я могу использовать тот же код (и более сложный код, указанный ранее) в другом проекте.
Пожалуйста, внесите свой код. Без кода здесь недостаточно информации для предоставления ответа. – Asaph 2010-12-03 06:37:18
Возможно, он находится внутри функции getResults, если вы могли бы опубликовать это, но это очень помогло бы. – Brains1994 2010-12-03 07:01:17
извините, добавил это также. – dpsthree 2010-12-03 07:08:00