powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / prepareCall
10 сообщений из 10, страница 1 из 1
prepareCall
    #34928080
evgenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мое почтение

не поможите разобраться в чем проблема при выполнении следующего кода на MySQL

String query =
"select user_id from users where UPPER(user_name) = UPPER(?)";
Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;
try {
conn = SectorsSystem.getConnection();
cs = conn.prepareCall(query);
cs.setString(1, name);
rs = cs.executeQuery();
while (rs.next()) {
user_id = rs.getLong(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null)
try {rs.close(); }
catch (SQLException e) { e.printStackTrace();}
finally { rs = null;}
if (cs != null)
try {cs.close(); }
catch (SQLException e) { e.printStackTrace();}
finally { cs = null;}
}

на prepareCall вываливается ошибка:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: FUNCTION user_id does not exist

данная конструкция работает на Oralce и MSSQL, а вот на MySQL чего то нехочет. Что не так?
...
Рейтинг: 0 / 0
prepareCall
    #34928093
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PreparedCall используется при вызове хранимой процедуры.
Запросы следует выполнять с помощью класса PreparedStatement.
...
Рейтинг: 0 / 0
prepareCall
    #34928094
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, ваш код — говно.
...
Рейтинг: 0 / 0
prepareCall
    #34928137
evgenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда почему же на oracle и mssql все работало?

Софтверный проктологКстати, ваш код — говно.

ну поделитесь опытом
...
Рейтинг: 0 / 0
prepareCall
    #34928186
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgenisну поделитесь опытом
Вариант плохой.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
     public   long  test126(String name)  throws  SQLException {
        String query = "select user_id from users where UPPER(user_name) = UPPER(?)";
        Connection conn =  null ;
         try  {
            conn = ConnectionPool.getInstance().getConnection();

            PreparedStatement ps =  null ;
            ResultSet rs =  null ;

             long  userId = - 1 ;

             try  {
                ps = conn.prepareStatement(query);
                ps.setString( 1 , name);
                rs = ps.executeQuery();
                 if  (rs.next()) {
                    userId = rs.getLong( 1 );
                }

                 return  userId;
            }  finally  {
                 if  (rs !=  null ) {
                    rs.close();
                }
                 if  (ps !=  null ) {
                    ps.close();
                }
            }
        }  finally  {
             if  (conn !=  null ) {
                conn.close();
            }
        }
    }

Вариант хороший.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
     private   final   static  String QUERY_GET_USER = "select user_id from users where UPPER(user_name) = UPPER(?)";
     public   Long  test127(String name)  throws  SQLException {
        DBQuery query =  new  DBQuery(ConnectionPool.getInstance().getConnection());
         try  {
            query.prepare(QUERY_GET_USER);
            query.addString(name);

             Long  userId =  null ;

            ResultSet rs = query.executeQuery();
             if  (rs.next()) {
                userId =  new   Long (rs.getLong( 1 ));
            }

             return  userId;

        }  finally  {
            query.close();
        }
    }
...
Рейтинг: 0 / 0
prepareCall
    #34931208
evgenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, учту
...
Рейтинг: 0 / 0
prepareCall
    #34931553
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант, который вы должны были сами написать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
     private   final   static  String QUERY_GET_USER = "select user_id from users where user_name = ?";
    /**
     * Метод, получающий код пользователя по его имени.
     *
     * @param name имя пользователя
     * @return код пользователя. Если возвращается null — это значит, что пользователь с таким 
     * именем отсутствует в базе.
     * @throws SQLException в случае любой ошибки SQL (неправильный запрос).
     */
     public   Long  getUserID(String name)  throws  SQLException {

        // Возможно, при многократном использовании стоит отказаться от ручного выделения SQL-Connection
        // и включить его передачу внутрь класса извне.
        Connection conn = ConnectionPool.getInstance().getConnection();
        DBQuery query =  new  DBQuery(conn);
         try  {
            query.prepare(QUERY_GET_USER); // подготовка запроса
            query.addString(name); // установка переданного имени пользователя

             Long  userId =  null ;

            ResultSet rs = query.executeQuery();
             if  (rs.next()) { // Более одного пользователя с одним именем у нас не будет. Уникальный constraint не позволит.
                userId =  new   Long (rs.getLong("user_id"));
            }

             return  userId;

        }  finally  {
            query.close(); // закрываем используемый PreparedStatement, ResultSet

            // Закрываем Connection (при передаче подключения в класс извне эта строчка станет ненужной).
            // Эта строчка потенциально небезопасна (правда, если query.close() неожиданно выдаст исключение —
            // значит java-машина пошла вразнос (или внезапно пропало соединение с БД)
            conn.close(); 
        }
    }

...
Рейтинг: 0 / 0
prepareCall
    #34931832
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтверный проктолог
Не надоело одно и то же писать? стока букф...
...
Рейтинг: 0 / 0
prepareCall
    #34931955
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmНе надоело одно и то же писать? стока букф...
Неа. Мне требуется разрядка — сделать что-нибудь простое и бессмысленное.
...
Рейтинг: 0 / 0
prepareCall
    #34932281
Фотография Изя Шниперсон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgenisтогда почему же на oracle и mssql все работало?

Софтверный проктологКстати, ваш код — говно.

ну поделитесь опытом

Интерфейс JDBC с различными СУБД работает по-разному.
PrepareCall все же лучше использовать для вызова хранимых процедур,
а для прекомпилированных запросов использовать PreparedStatement
У вас же вполне очевидная ошибка от MySQL - он пытается выполнить хранимую процедуру под названием user_id и не может ее отыскать.
Задайте этот вопрос в форуме МySQL - мож там знаю как DML запрос за хранимую процедуру выдать.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / prepareCall
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]