2016-09-20 4 views
1

Это сводит меня с ума, потому что я не могу его понять. Я выполняю следующий код:Java SQL-запрос, не возвращающий действительный ResultSet

nameString = jcbClientList.getItemAt(jcbClientList.getSelectedIndex()); 
System.out.println(" Name String = " + nameString); 
sql = "SELECT * FROM clients WHERE Name = \'" + nameString + "\'"; 
System.out.println(sql); 

try { 
    Statement st = con.createStatement(); 
    ResultSet rs = st.executeQuery(sql); 
    while(rs.next()) { 
     clientID = rs.getInt(1); 
    } 
} 
catch(SQLException se) { 
    msg = "Problem getting client ID from DB \n" + se.getLocalizedMessage(); 
    System.out.println(msg); 
    JOptionPane.showMessageDialog(null, msg); 
} 

Строка SQL построена правильно. Я проверил это, взяв вывод строки строки и вставив ее в другой код, и он отлично работает. Однако в этом контексте я получаю исключение:

Недопустимое состояние курсора - нет текущей строки.

Даже если я сменил sql на «SELECT * FROM clients», который должен вернуть 20 строк и в другом месте приложения, он по-прежнему дает ту же ошибку. Обрабатываемая база данных представляет собой встроенную базу данных Derby DB.

+0

Возможный дубликат [Явное исключение Java SQL Execution Cursor State - нет текущей строки] (http://stackoverflow.com/questions/16576331/java-sql-exception-invalid-cursor-state-no-current-row) – DimaSan

+3

Вы уверены, что код, который вы опубликовали, дает эту ошибку? Какая строка именно та, которая производит ошибку? Возможно, вы ищете не то место. – sstan

+0

Вы уверены, что подключаетесь к правильной базе данных? – Dave

ответ

0

Я, кажется, помню, что столкнулся с определенными драйверами JDBC, которые неправильно реализовали часть, в которой говорится: «Курсор ResultSet изначально расположен перед первой строкой». Я обошел его, сначала выполнив первый() (или beforeFirst()) вызов, и только потом запустил вызов next().

+0

Я столкнулся с этим до и вывел оператор с набором типов, чтобы дать прокручиваемый набор результатов, а затем реализовать beforeFirst(). Это не имело значения. Дело в том же фрагменте кода в другом месте не работает без проблем. – NigelGordon