Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > проблема с запросом на выборку Prepared Statement


Автор: une 19.12.2011, 21:16
Добрый день. Пытаюсь получить данные из базы данных формируя запрос через Prepared Statement. 

Вот код.
Код

   try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/db?characterEncoding=cp1251&connectionCollation=cp1251_general_ci";
            connection = DriverManager.getConnection(url, "root", "3132613");
String queryfromdb = "Select count_a From Author Where name=? And surname=?";
            preparedStatementfromdb = connection.prepareStatement(queryfromdb);
            preparedStatementfromdb.setString(1, VeryMain.newAuthor.getNameA());
            preparedStatementfromdb.setString(2, VeryMain.newAuthor.getSurname()); 
            resultSet = preparedStatementfromdb.executeQuery();  
             
            
            while (resultSet.next()) { 
            int dbDeptNumber = resultSet.getInt(1);
            VeryMain.newAuthor.setCountA(dbDeptNumber); //сюда передаём значение ячейки
            } 
        catch (ClassNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } 
        catch (SQLException e) {
        } 
        finally {
            try {
                preparedStatement.close();
                preparedStatementfromdb.close();
                connection.close();
            } 
            catch (Exception exception) {
            }
        }




Запрос формируется. Переменные передаются без ошибок. Но запрос не выполняется. Вот на этой строчке код летит. 
Код

           resultSet = preparedStatementfromdb.executeQuery();  


Ошибок не выдаёт.
В чём тут загвоздка??? 


P.S: и ещё господа, подскажите пожалуйста по поводу этого:
Код

while (resultSet.next()) { // нужно ли тут вайл если нам передаётся всего лишь одна ячейка
            int dbDeptNumber = resultSet.getInt(1);
            VeryMain.newAuthor.setCountA(dbDeptNumber); //сюда передаём значение ячейки
            } 



нужно ли мне тут использовать while если нам передаётся всего лишь одна ячейка???


Буду очень рада, если поможете   smile 

Автор: Stolzen 20.12.2011, 00:04
Запрос напишите так:
"Select count(*) From Author a Where a.name=? And a.surname=?"

While не нужно, но нужно next() вызвать, в данном случае достаточно один раз.

Автор: une 20.12.2011, 01:44
за пояснения про while спасибо. smile 
А вот с запросом беда, count_a - это название столбца значение, которого надо получить и передать в переменную. Попробовала еще вместо count (*) подставить count_a(*), но с этими запросами программа пропускает тот же кусок кода, в том же месте что и было раньше. 



P.S: 

From Author a Where a.name=? And a.surname=?
Мне не совсем понятна конструкция с "a" Видела это в named queries, но там выбирались все поля, например

"SELECT a FROM Author a WHERE a.country = :country"

что делать когда поле надо одно? именно такой запрос, как Вы написали? smile 

Автор: Stolzen 20.12.2011, 01:55
Тогда
"Select a.count_a From Author a Where a.name=? And a.surname=?"

"a" - это alias на таблицу Author, можно прочесть про это http://www.1keydata.com/sql/sqlalias.html или http://www.sqltutorial.org/sqlalias.aspx

Автор: une 20.12.2011, 12:30
Alias - то, чего мне не хватало, огромное спасибо.   smile 

по итогу для моего случая запрос оказался таким: 

 "Select a.count_a From Author a Where a.name_a=? And a.surname=?";

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)