2014-01-11 3 views
0

Я извлекаю два столбца из таблицы в MySql, используя prepareStatement в Java. Запрос действителен и возвращает строки, если я выполняю его непосредственно в mySql DB. но для этого вызова метода ResultSet имеет значения «false» для каждого вызова ResultSet.next(). Ниже приведен код:ResultSet является false в executeQuery Mysql - Java, даже когда существует строка

private ResultSet fetchFriends(int lActProfId) throws SQLException { 
     // TODO Auto-generated method stub 
     String selectRelationQry= "SELECT friend_id, type FROM fs_relationship WHERE profile_id =?"; 
     System.out.println("---- In method FetchAndInsertInWall()->fetchFriends - Qry: "+selectRelationQry); 
     pst = lCon.prepareStatement(selectRelationQry); 
     pst.setInt(1, lActProfId); 
     System.out.println("lActProfId: "+ lActProfId); 
     ResultSet res3 = pst.executeQuery(); 
     System.out.println("---- temp--- In method FetchAndInsertInWall()->fetchFriends query has no Results"); 
     if(!res3.next()){ 
      System.out.println("---- In method FetchAndInsertInWall()->fetchFriends query has no Results"); 
     } else {System.out.println("Elements in res3: "+res3.next() + res3.next() + res3.next()); 
     } 
     pst = null; 
     return res3; 
    } 

Я получаю следующий вывод на консоль:

---- In method FetchAndInsertInWall()->fetchFriends - Qry: SELECT friend_id, type FROM fs_relationship WHERE profile_id =? 
lActProfId: 5002 
---- temp--- In method FetchAndInsertInWall()->fetchFriends query has no Results 
Element in res31: false 
----> WallInsertions Failed for Uid: 5002 
java.sql.SQLException: Illegal operation on empty result set. 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) 
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:855) 
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2710) 
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2851) 
    at com.fs.javadbact.FetchDataAndInsertInWall.fetchAndInsertInWall(FetchDataAndInsertInWall.java:64) 
    at com.fs.javadbact.ConsumerTest.run(ConsumerTest.java:86) 
    at java.lang.Thread.run(Unknown Source) 
Jan 12, 2014 3:34:57 AM com.fs.javadbact.ConsumerTest run 

Пожалуйста, помогите мне, как решить эту проблему и получить надлежащее ResultSet с правильными данными.

+0

У вас есть 'system.out', не произнося никаких результатов, прежде чем вы спросите, и, кроме того, вы используете' .next' три раза позже – nachokk

+0

Я не понимаю, чего вы хотите! вы не можете получить какое-либо значение из своего db, которое в конечном итоге приведет к ошибке, нажав next() (итерация в результатах), если у вас нет –

+0

. Если тот же запрос с тем же аргументом возвращает строки в вашем браузере db инструмент, то это означает, что либо инструмент просмотра db возвращает строки, которые были вставлены, но еще не зафиксированы, либо что код не использует ту же базу данных/схему, что и инструмент просмотра базы данных. –

ответ

0

Я думаю, что вы забыли объявить PreparedStatement перед тем pst переменная
записи:
PreparedStatement pst = lCon.prepareStatement(selectRelationQry);
вместо:

pst = lCon.prepareStatement(selectRelationQry); 
+0

Объявлено в другой части кода. – AbhiBlr

0

Использование GetString() вместо следующего(), чтобы получить значения из ряд.

Если ваш результат меньше трех рядов, вы исчерпаете результирующий набор. Я не знаю, требуется ли next() работать после возврата false один раз.

 Смежные вопросы

  • Нет связанных вопросов^_^