Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как лучше организовать работу с БД


Автор: olexande 24.9.2008, 12:50
Продолжаю разбираться ... 
Сейчас уже наваял по примерам что-то похожее на цель ... 

Предм. область: учёт картриджей к принтерам, у кого он, сколько времени, заправлен-ли?

Вопрос 1:
Есть таблица в БД. Поля - ID (уникальный ключ), поле названия чего-то там (на рисунке производитель), JComboBox заполняется из БД (запрос вытягивает из БД 1 столбец с названиями ). Как можно или правильнее организовать связь между выбранным производителем картриджей и его ID для дальнейшего использования? Думаю потом не корректно будет опять искать в БД ID уже торговой марки, интересующей  пользователя, которую я получу от JComboBox ...

ориентировочный интерфейс прилепил ... 

Автор: Kudzu 24.9.2008, 13:18
Что, простите?

Автор: mbasil 24.9.2008, 14:48
Простите надо идти не от картинок пользовательского интерфейса, а от структуры базы или классов доменной модели приложения. Вопрос вы задали невразумительно.

Автор: olexande 24.9.2008, 15:11
Все таблицы в 1 БД на 1 сервере ... 
1 таблица : ID_vendor (уникальный ключ в таблице), vendor (текстовое поле, торговая марка)
2 таблица : ID_kartridg (уникальный ключ в таблице), ID_vendor , kartridg_type (текстовое поле, тип картриджа)

Хочу что-бы пользователь выбрал vendor, что-бы потом ID_vendor подставить в таблицу 2 в соотв. поле. (что-бы небыло в БД записей типа Hewlet pakard, Hewled Paсkart, HP ... smile )

JComboBox заполняю запросом из БД:
Код

"SELECT vendor FROM `kartriges`.`types`;"


Как получить ID_vendor, соответствующий выборанному пользователем ТМ без доп поиска по имени vendor. Само значение vendor я могу получить от JComboBox ...

Так корректнее вопрос?

Автор: mbasil 24.9.2008, 16:59
Извлекайте данные прямо в модель для JComboBox в виде объекта, который в методе toString() возвращает только имя  vendor'а, а его ID не показывает в списке, но хранит.   Запрос же делайте так

"SELECT ID_vendor, vendor FROM `kartriges`.`types`;"

и извлекайте данные в объекты класса, например Vendor
Подозреваю, что сейчас вы в JComboBox в качестве значения просовываете объект типа String. Не забывайте, что у JComboBox имеется модель и именно она содержит список. Этот список не обязательно должен иметь элементы типа String.

Автор: olexande 26.9.2008, 11:10
ДА, заполняю так:
Код

JComboBox comboBox = new JComboBox();
        
        
                   Statement statement = null;
                   ResultSet resultset;
                   Connection conn;
                   try
                   {
                           Class.forName("com.mysql.jdbc.Driver").newInstance();
                   }
                   catch (Exception ex)
                   {
                           System.out.println("error!");
                   }
                   try
                   {          
                     conn = DriverManager.getConnection("jdbc:mysql://My_Server_IP:3306/kartriges?user=My_Login&password=My_Pass&characterEncoding=UTF8");
                     statement = conn.createStatement();
                     resultset = statement.executeQuery("SELECT vendor FROM `kartriges`.`types`;");
                     while (resultset.next())
                     {
                         comboBox.addItem(resultset.getString(1));                         
                     }
                     add(comboBox);
                   }
                   catch (SQLException ex)
                   {                     
                     System.out.println("SQLException: " + ex.getMessage()); 
                     System.out.println("SQLState: "     + ex.getSQLState()); 
                     System.out.println("VendorError: "  + ex.getErrorCode());                      
                   }


А можно чуть подробнее про эти объекты и как из них тогда вытягивать ID?

Автор: mbasil 26.9.2008, 17:28
1. Создать класс Vendor
2. Реализовать у класса Vendor метод public String toString() так,
   чтобы он возвращал только имя вендора

Код

DefaultComboBoxModel vendorComboModel = new DefaultComboBoxModel();
. . .
      while (resultset.next()) {
         Vendor v = new Vendor( resultset.getInt(1), resultset.getString(2) ) 
         vendorComboModel.addElement( v );                         
       }
JComboBox  comboBox = new JComboBox( vendorComboModel );
. . .

Vendor v2 = (Vendor)comboBox.getSelectedItem(); 
int ID = v2.getID();

Автор: olexander 5.10.2008, 12:18
Пока продолжу спрашивать дальше ... 
Вопрос 2: Как (с помощью чего) удобно (проще ... ) создать форму документа (некоего абстрактного отчёта) состоящего из данных БД, шапки, надписей с возможностью их печати в виде как на экране? Например как отчёты в MS Access. Пользователю самому создавать не обязательно ... 

Вопрос 3:
Программу слепил на базе примера "InternalFrameDemo" из книги Java 2  Хорстмана.  выполняю запрос ... 
В каждом "меню интерфейса" делаю некий простой запрос к БД. Ввод данных, изменение, вывод таблицы ... В каждом "блочке" заново создаю соединение с БД и выполняю запрос ... В паскале я-бы "взял-бы" главную процедуру в "запрос соединения" и от туда же-бы вызывал всё. Методом тыка просто "впихнуть" не удалось ... ИДЕ говорит то сделай его статик, то не видит чего-то ... Как это организовать корректно?

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