Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Запрос в Мускуль
Список форумов
 ->  Работа с базами данных


На страницу 1, 2  След. 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
Excellion : 35
Новичок

СообщениеЯнв 05, 2012 15:46 
Ответить с цитатой
Вообщем без вашей помощи опять не обойтись... =(

Есть JTextArea , JButton. в JTextArea вписываю sql запрос. JButton - служит как кнопка "выполнить"

Действие кнопки:
Код:
      bt.addActionListener(new ActionListener()
      {
         
         @Override
         public void actionPerformed(ActionEvent e)
         {
            sqlman.sendSqlToDataBase(ta.getText());
         }
      });
      
   }




Код:
package com;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import database.DatabaseFactory;



public class SqlManager
{
   public void sendSqlToDataBase(String sql)
   {
       try
         {
          Connection con = DatabaseFactory.getInstance().getConnection();
          PreparedStatement preparedstatement = con.prepareStatement(sql);
          preparedstatement.execute();
          con.close();
         
         }
         catch(SQLException sqlexception)
         {
            System.out.println("ERROR:  "+ sqlexception.getMessage());
         }

   }
}




вообщем вбиваю к примеру в JTextArea запросик:

INSERT INTO `test` VALUES (111111, 2222222);

Кликаю кнопку "выполнить" (JButton) все классно в базу добавилось.

Вбиваю в JTextArea более одного запроса к примеру вот так:

INSERT INTO `test` VALUES (111111, 2222222);
INSERT INTO `test` VALUES (222222, 1111111);

выбивает ошибку:

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 'INSERT INTO `test` VALUES (222222, 1111111)' at line 2

Как решить это проблему ?
К началу Посмотреть профиль Отправить личное сообщение
masyan : 920
Supreme moderator

СообщениеЯнв 05, 2012 16:08 
Ответить с цитатой
ну атак он у вас как один запрос выполняется. Для выполнения вам надо парсить и для каждого вызывать. Или там есть что то типа ..Batch которые принимает список команд (точно не помню, но что то такое вроде было)
К началу Посмотреть профиль Отправить личное сообщение
Excellion : 35
Новичок

СообщениеЯнв 05, 2012 16:29 
Ответить с цитатой
вот поподробнее бы ))
К началу Посмотреть профиль Отправить личное сообщение
Ardatov : 10
Новичок

СообщениеЯнв 05, 2012 16:40 
Ответить с цитатой
Разбейте текст из JTextArea по строкам, затем для каждой строки используйте новый запрос.
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Excellion : 35
Новичок

СообщениеЯнв 05, 2012 16:44 
Ответить с цитатой
уже думал об этом, но вот как Разбить по строкам не могу понять...
Как разбить на строки и потом получить содержимое определенной строки ?
К началу Посмотреть профиль Отправить личное сообщение
masyan : 920
Supreme moderator

СообщениеЯнв 05, 2012 16:46 
Ответить с цитатой
про batch тут http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/tjvbtupd.htm
Но это не то что вы хотите. Разбейте входящий текст по ";" полученный массив или добавляйте как по ссылке и потом скопом все выполняйте или каждый запрос выполняйте, как вам надо вообщем.

для разбиений используйте метод split() у строки
К началу Посмотреть профиль Отправить личное сообщение
Ardatov : 10
Новичок

СообщениеЯнв 05, 2012 17:23 
Ответить с цитатой
Excellion писал(а):
уже думал об этом, но вот как Разбить по строкам не могу понять...
Как разбить на строки и потом получить содержимое определенной строки ?


Как вариант можно использовать StringTokenizer:
Код:
String text = myTextArea.getText();
StringTokenizer st = new StringTokenizer(text, ";");
while (st.hasMoreTokens()) {
      String query = (st.nextToken() + ";").trim();
      myStatement.executeUpdate(query);
}
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Excellion : 35
Новичок

СообщениеЯнв 05, 2012 17:28 
Ответить с цитатой
Спасиб всем за помощь!
Использовал split
К началу Посмотреть профиль Отправить личное сообщение
Excellion : 35
Новичок

СообщениеЯнв 05, 2012 18:11 
Ответить с цитатой
Еще 1 вопросик..

так у меня выводит сообщение если произошла ошибка...
Код:
         catch(SQLException sqlexception)
         {
            System.out.println("ERROR:  "+ sqlexception.getMessage());
         }


а как вывести ответ от мускуля о том что он сделал с запросом ?

типо вот такого как через консоль мускуля

Код:
Query OK, 1 row affected
К началу Посмотреть профиль Отправить личное сообщение
masyan : 920
Supreme moderator

СообщениеЯнв 05, 2012 18:16 
Ответить с цитатой
посмотрите что возвращает метод который выполняет запрос у вас в коде
К началу Посмотреть профиль Отправить личное сообщение
Ardatov : 10
Новичок

СообщениеЯнв 05, 2012 18:28 
Ответить с цитатой
Excellion писал(а):
Еще 1 вопросик..

так у меня выводит сообщение если произошла ошибка...
Код:
         catch(SQLException sqlexception)
         {
            System.out.println("ERROR:  "+ sqlexception.getMessage());
         }


а как вывести ответ от мускуля о том что он сделал с запросом ?

типо вот такого как через консоль мускуля

Код:
Query OK, 1 row affected


В документации есть все ответы на ваши вопросы.
Метод int executeUpdate(String sql) возвращает количество вставленных, удаленный или обновленных строк или 0 если запрос не возвращает ничего. Про то что при неудачном запросе метод возвращает -1 ничего не сказано, но попробуйте.
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Excellion : 35
Новичок

СообщениеЯнв 05, 2012 19:14 
Ответить с цитатой
это немного не то
к примеру команда:
show variables like 'max_connections';
должна вывести примерно вот такое:

+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 700 |
+-----------------+-------+
1 row in set (0.00 sec)
К началу Посмотреть профиль Отправить личное сообщение
Ardatov : 10
Новичок

СообщениеЯнв 05, 2012 19:22 
Ответить с цитатой
Excellion писал(а):
это немного не то
к примеру команда:
show variables like 'max_connections';
должна вывести примерно вот такое:

+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 700 |
+-----------------+-------+
1 row in set (0.00 sec)

То есть вы хотите получить результат запроса?
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Excellion : 35
Новичок

СообщениеЯнв 05, 2012 19:26 
Ответить с цитатой
да
К началу Посмотреть профиль Отправить личное сообщение
Ardatov : 10
Новичок

СообщениеЯнв 05, 2012 20:16 
Ответить с цитатой
Тогда для вашего Statement'a используйте метод getResultSet() и его метаданные.
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
 
Начать новую тему  Ответить на тему
Страница 1 из 2
На страницу 1, 2  След.
Список форумов
 -> Работа с базами данных


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


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru