Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jdbc+MySQL, не выполняется двойной select 
V
    Опции темы
denixx
Дата 15.7.2011, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Вот сейчас тренируюсь на MySQL'е: написал простенькое приложеньице, которое выполняет SQL-запрос, написанный в JTextArea и передаёт его мускулу на обработку. 

Так выяснилось, что в Workbench запись 
"select * from test.client; 
select * from test.client;" 
выполняется нормально, возвращает две одинаковых таблицы, а в моем приложении не хочет, ругается: 
"com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from test.client' at line 2" 

Неужели мускул не умеет обрабатывать двойной запрос? 

Для выполнения запроса я использую execute()

Код

        Statement stmt = null;
        try {
            stmt = conn.createStatement();
        } catch (SQLException ex2) {
        }
        ResultSet rs = null;
        boolean resExec = false;
        int updCount = 0;
        try {
            if (wnd.jta1.getSelectedText()!=null) {
                System.out.println("\"" + wnd.jta1.getSelectedText() + "\"");
                //rs = stmt.executeQuery(wnd.jta1.getSelectedText());
                resExec = stmt.execute(wnd.jta1.getSelectedText());
            } else {
                System.out.println("\"" + wnd.jta1.getText() + "\"");
                //rs = stmt.executeQuery(wnd.jta1.getText());
                resExec = stmt.execute(wnd.jta1.getText());

            }
            System.out.println("resExec = " + resExec);
            if (resExec == true) {
                rs = stmt.getResultSet();
                System.out.println("resExec = true, взят rs");
            } else {
                updCount = stmt.getUpdateCount();
                System.out.println("resExec = false, взят updCount = " +
                                   updCount);
            }
        } catch (SQLException ex1) {
            ex1.printStackTrace();
        }


В принципе не выполняются любые 2 запроса подряд. 
Только один за раз. 

Пробовал ещё 
"insert into test.client (ClientName, Address1) 
values ('Anton','Antonov'); 
delete from test.client WHERE ClientName = 'Anton' and Address1 = 'Antonov'; 
select * from test.client;" 
тоже не хочет выполнять.
PM MAIL   Вверх
Zыыыыы
Дата 15.7.2011, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.2.2010

Репутация: нет
Всего: нет



Дело тут все же не в MySQlе. Думаю это происходит из-за того, что метод execute воспринимает строку как один запрос - ессно он получается невалидным. Вариант решения - парсить текст со скриптом с учетом разделителя ";".
PM   Вверх
denixx
Дата 28.7.2011, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Выяснилось, что эта возможность отключена по умолчанию, и её надо включать при помощи специального параметра, записанного в URL соединения с БД:
Код

        conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test?allowMultiQueries=true",
                "login", "password");

Тогда всё работает.
Но, как утверждают разработчики MySQL, это может быть опасно из-за возможности SQL-инъекций в коде.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0662 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.