Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java Базы данных (JDBC, JPA, Hibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2011, 02:41   #1
margaritachka
 
Регистрация: 10.05.2010
Сообщений: 6
Смущение Свяди между сущностями, вывод таблиц, Derby

Здравствуйте.
У меня тут при "ознакомлении" с Derby в NetBeans возникла проблема.
Создала 4 таблицы. Теперь не знаю, как вывести на экран данные так, чтобы с одной таблицы, например, вывелось 2 столбца, с другой один столбец и т.п.
С выводом одной целой таблицы на экран проблем нет.
Подскажите пожалуйста, как это сделать. У меня есть исходный код, с которым я работаю. Этот кусочек выводит таблицу Product
Код:
 if ("show".compareTo(obj.getMsg()) == 0) {

                    list = new ArrayList();

                    ResultSet rs = ServerDB.getStatement().executeQuery("SELECT * FROM APP.PRODUCT");
                    while (rs.next()) {
                        System.out.println(rs.getRow() + ". " + rs.getString("ProductId") + ". " + rs.getString("ProductName")
                                + "." + rs.getString("Sebestoimost") + ". " + rs.getString("UrovenPribili"));
                        list.add(rs.getString("ProductId"));
                        list.add(rs.getString("ProductName"));
                        list.add(rs.getString("Sebestoimost"));
                        list.add(rs.getString("UrovenPribili"));

                    }
                    BufferedOutputStream buf_output = new BufferedOutputStream(s.getOutputStream());
                    ObjectOutputStream obj_output = new ObjectOutputStream(buf_output);

                    Sign res = new Sign(list);
                    obj_output.writeObject(res);
                    obj_output.flush();
                }
Пыталась переделать, вот что получилось
Код:
if ("analyse".compareTo(obj.getMsg()) == 0) {

                    list = new ArrayList();

                    ResultSet rs = ServerDB.getStatement().executeQuery("SELECT * FROM APP.PRODUCT" + "SELECT * FROM APP.FIRMA" 
                            + "SELECT * FROM APP.Cena" + "SELECT * FROM APP.TorgovajaSet");
                    while (rs.next()) {
                        System.out.println(rs.getRow() + ". " + rs.getString("ProductName") + ". " + rs.getString("Sebestoimost")
                                + "." + rs.getString("UrovenPribili") + ". " + rs.getString("Nazvanie") + ". " + rs.getString("TorgovajaSetName") + ". "
                                + rs.getString("ZelaemayaCena"));
                        list.add(rs.getString("ProductName"));
                        list.add(rs.getString("Sebestoimost"));
                        list.add(rs.getString("UrovenPribili"));
                        list.add(rs.getString("Nazvanie"));
                        list.add(rs.getString("TorgovajaSetName"));
                        list.add(rs.getString("ZelaemayaCena"));

                    }
                    BufferedOutputStream buf_output = new BufferedOutputStream(s.getOutputStream());
                    ObjectOutputStream obj_output = new ObjectOutputStream(buf_output);

                    Sign res = new Sign(list);
                    obj_output.writeObject(res);
                    obj_output.flush();
                }
я так поняла, что проблема в этой строчке
Код:
ResultSet rs = ServerDB.getStatement().executeQuery("SELECT * FROM APP.PRODUCT" + "SELECT * FROM APP.FIRMA" 
                            + "SELECT * FROM APP.CENA" + "SELECT * FROM APP.TORGOVAJASET");
Там нужно как-то по другому обращаться к базе, возможно устанавливать связи между сущностями, но я, честно говоря, понятия не имею как это делать в Derby.
Вообще в Derby можно устанавливать связи между сущностями разных таблиц?

Последний раз редактировалось margaritachka; 29.11.2011 в 02:44.
margaritachka вне форума Ответить с цитированием
Старый 30.11.2011, 15:16   #2
david_8907
 
Регистрация: 30.11.2011
Сообщений: 3
По умолчанию

тут проблема скорее в языке SQL
попробуйте погуглить по join -- подозреваю, что таблицы вообще на это не расчитаны
david_8907 вне форума Ответить с цитированием
Старый 30.11.2011, 19:43   #3
margaritachka
 
Регистрация: 10.05.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от david_8907 Посмотреть сообщение
тут проблема скорее в языке SQL
попробуйте погуглить по join -- подозреваю, что таблицы вообще на это не расчитаны
К счастью, с этим я уже разобралась. Ответ был прост: забудь о дерби, делай лучше в MySQL, там на много удобнее)
запрос теперь выглядит так и все работает:
Код:
ServerDB.Zapros("SELECT * FROM `product` INNER JOIN `firma` "
                   + "ON `product`.`FirmaId` = `firma`.`FirmaId` INNER JOIN `cena`"
                   + "ON `firma`.`CenaId` =  `cena`.`CenaId` INNER JOIN `torgovajaset`"
                   + "ON `torgovajaset`.`CenaId` = `cena`.`CenaId`",7);
У меня появилась новая проблема, опять с формулированием SQL запроса.
Если кратко, то мне надо вывести в таблицу столбец TorgovajaSetName из таблицы torgovajaset и «число», которое будет не больше Cena из таблицы cena цена и не меньше UrovenPribili из таблицы product.
Чтобы не писать рандом, который я, кстати, тоже не до конца понимаю как делается, я решила не париться и тем самым «числом» сделать значение Cena-1, ну то есть во второй столбец таблицы будет выводиться число, которое на 1 меньше, чем Cena из таблицы cena
В моем запросе это выглядит так:
Код:
ServerDB.Zapros("SELECT `cena`.`Cena`-1, `torgovajaset`.`TorgovajaSetName` "
                   + "FROM `cena`, `product`, `torgovajaset` "
                   + "WHERE `cena`.`Cena`<`product`.`UrovenPribili`",8);
В другом пакете класс ServerDB, вот его часть, которая работает непосредственно с запросом:
Код:
if(I==8){
            rs = stmt.executeQuery(SQL);
            while (rs.next()) {
            list.add(rs.getString("Cena"));
            list.add(rs.getString("TorgovajaSetName"));      
            }}
Запрос, начинающийся с Select, почему-то в проекте не работает, хотя спокойно работает в MySQL, может кто-нибудь сможет найти ошибку или подсказать что-нибудь?
margaritachka вне форума Ответить с цитированием
Старый 01.12.2011, 08:38   #4
david_8907
 
Регистрация: 30.11.2011
Сообщений: 3
По умолчанию

чет я вообще синтаксис запроса не понял -- попробуйте без апострофов
на счет Derby -- зря, в полне работоспособная базка данных

просто с Hibernate работается намного лучше

ЗЫ хотя догнал -- вы вообще не правильно написали, вы хотите указать строковую переменную cena или все таки значение ячейки ?
david_8907 вне форума Ответить с цитированием
Старый 01.12.2011, 16:19   #5
margaritachka
 
Регистрация: 10.05.2010
Сообщений: 6
По умолчанию

значение ячейки, т.е добавить в список list 2 ячейки: Cena и TorgovajaSetName.
margaritachka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь между двумя БД двух таблиц sergey12 Microsoft Office Access 1 20.06.2011 08:24
вывод полей из двух таблиц 6666 БД в Delphi 2 12.05.2011 15:33
Derby Sheril Помощь студентам 1 11.09.2010 18:27
Переключится между таблиц Михаил Юрьевич БД в Delphi 2 31.07.2009 17:38
Количество строк с условием между таблиц Deight SQL, базы данных 2 07.05.2009 01:14