Создание простого клиента MySQL в NetBeans

NetBeans имеет удобный интерфейс для подключения к базе данных, однако многие команды SQL должны вводиться как полное предложение. Автором разработано приложение Swing для вставки и просмотра данных в таблицу базы данных MySQL. Это очень простой пример, доступный для одной определенной таблицы; без операции удаления или обновления он расширяется, однако при этом документ будет длиннее и сложнее.

ИНДЕКС

Подключение к базе данных MySQL

Предполагается, что у читателей уже настроена рабочая среда сервера базы данных MySQL, и у пользователя имеются необходимые права. В данном примере:

имя базы данных: nonidb
пользователь: noniko
пароль: (пустой)
<- так как это всего лишь пример. В случае ввода ценных данных необходимо задать соответствующий пароль!

Также необходимо получить файл драйвера JDBC для MySQL. Файл mysql-connector-java-3.1.6-bin.jar был подготовлен автором через веб-сайт разработчиков MySQL.

Теперь обратимся к NetBeans. Щелкните вкладку "Среда выполнения" для переключения окна. Обычно отображается окно "Проекты" или "Файлы".

Выбор "Добавить драйвер" в окне "Среда выполнения"

На ней появится узел "Базы данных". Откройте этот узел, а затем перейдите к вложенному узлу "Драйверы". При дальнейшем развертывании содержимого узла "Драйверы" отображается только элемент "JDBC-ODBC". В первую очередь, здесь необходимо добавить драйвер MySQL. Щелкните правой кнопкой мыши узел "Драйверы" для просмотра контекстного меню и выберите "Добавить драйвер".

Откроется окно "Настройка".

Определите местоположение файла драйвера JDBC.

При нажатии кнопки "Добавить" можно выполнить поиск файла драйвера с помощью графических средств. Как и в вышеописанном случае, подготовлена папка D:\nonidata\nb4worksnew для папок проекта и подпапка "lib", содержащая файлы библиотек.

При выборе местоположения файла драйвера класс и имя драйвера настраиваются автоматически. В случае драйвера JDBC MySQL имя старого класса определяется первым. Нажмите кнопку "Поиск": индикатор выполнения внизу активируется, и появится сообщение "Поиск классов драйвера завершен".

Теперь откройте поле со списком для параметра "Класс драйвера". Здесь можно выбрать текущее имя класса драйвера JDBC.

Измените имя класса на текущую версию.

Нажмите кнопку "ОК"; после этого под узлом "Драйвер" будет добавлен новый узел драйвера. Щелкните правой кнопкой мыши и выберите "Соединиться с использованием..." в контекстном меню.

Выбор "Соединить с использованием..." в контекстном меню

Откроется окно "Настройка". В нем необходимо ввести URL-адрес базы данных, имя пользователя и пароль (в данном примере поле "Пароль" остается пустым). После нажатия кнопки "ОК" на индикаторе выполнения ниже появится сообщение "Соединение установлено". Можно изменить страницу на "Расширенная", но в данном случае расширенная настройка не требуется.

После установление соединения появится узел для соединения. Теперь перейдем к следующему шагу.

Создание примера таблицы

Щелкните правой кнопкой мыши узел для соединения, установленного ранее. Выберите "Создать таблицу...".

Выбор "Создать таблицу" в контекстном меню

Откроется окно для настройки будущей таблицы. Для просмотра требуемой настройки может потребоваться вручную развернуть это окно. Наиболее важные параметры настройки: "Ключ", "Имя столбца", "Имя и размер данных", в зависимости от типа данных.

Создание таблицы в NetBeans

В данном случае создан пример таблицы "cars" с определением полей carid, name, vendor и type. Поле "carid" является первичным ключом. Во всех полях используется тип данных VARCHAR. В качестве размера для "carid" установлено значение 10, а для всех остальных полей - 20.

После создания таблицы узел отображается под узлом подключения. Появится структура таблицы "cars".

Дерево узлов созданной таблицы

Вставка первых данных

Теперь вставим первую строку с помощью отправки команды SQL. Щелкните правой кнопкой мыши любой узел под узлом подключения для просмотра пункта меню "Выполнить команды...".

Большое окно выполняемой команды отображается в том же месте в редакторе исходного кода. Он довольно большой, поэтому полный снимок экрана в данном примере не приводится. Важным элементом является, прежде всего, текстовая область для ввода команды,

Ввод целой команды-фразы

Нажмите кнопку "Выполнить", и если команда правильна, внизу появится сообщение "Команда выполнена успешно". Чтобы убедиться в этом, щелкните правой кнопкой мыши узел "cars" и выберите "Просмотреть данные".

Правый щелчок мыши на узле "cars" для просмотра данных.

Первая вставка данных

Да! Первые данные успешно вставлены. Однако такая процедура вставки может оказаться достаточно сложной. По крайней мере, так показалось автору. Поэтому он предложил разработать приложение для вставки данных графическими средствами.

Создание нового проекта Java

Теперь создадим новый проект Java для приложения. В строке меню выберите "Файл" -> "Новый проект". В мастере создания проекта выберите "Общее" -> "Приложение Java" для определения типа проекта. В данном примере используются имя проекта "mysqloperation" и местоположение "d:\nonidata\nb4worksnew\mysqloperation". Установите флаг "Создать главный проект".

После создания проекта создайте новый пакет. В данном случае это "mysqlop".

Создание служебного класса для подключения базы данных

Работа базы данных в Java - очень сложный процесс, требующий соединения, операторов, определения результатов и многочисленных блоков try&catch. Для решения этих задач автор использовал служебный класс.

Полный код выглядит следующим образом - MyDBConnection.java.

Для подключения к базе данных MySQL используется метод init().

Метод getConnection() должен вызываться после метода init()method, что обеспечивает установленное соединение для другого класса.

Процесс завершается методами close() и destroy(). Для закрытия подключения, оператора или набора результатов необходим блок try&catch для извлечения.

Для использования этого файла для проекта необходимо установить путь к классам для драйвера JDBC. Щелкните проект "mysqloperation" правой кнопкой мыши и выберите в контекстном меню "Свойства...". В диалоговом окне "Свойства проекта" выберите "Построение" -> "Компиляция исходных файлов". Нажмите кнопку "Добавить файл JAR/&папку..." рядом с параметром "Путь к классам для компиляции исходных файлов", что позволит определять местоположение файла JAR JDBC.

Добавление файла JAR JDBC в путь к классам

Создание модели таблицы

Далее для использования в приложении автором была подготовлена настроенная модель таблицы для JTable.

Полный код выглядит следующим образом: CarTableModel.java.

Для написания этого кода использовался ряд удобных инструментов NetBeans.
Сначала необходимо создать новый файл класса Java с именем CarTableModel.java. Он имеет очень простой пустой шаблон для объявления пакета и класса.


Отредактируйте объявление класса вручную для расширения класса "AbstractTableModel". Ошибки выделяются в редакторе красным волнистым подчеркиванием. Одной из причин этих ошибок является импорт класса "javax.swing.table.AbstractTableModel" class. Исправить такую ошибку можно с помощью щелчка правой кнопкой мыши в любом месте кода и выбора "Исправить выражения импорта".

Использование средства "Исправить выражения импорта"

Можно убедиться в том, что объявление

import javax.swing.table.AbstractTableModel;

было вставлено в верхнюю часть исходного кода.

Однако красное подчеркивание сохраняется. Это связано с недостаточной реализацией соответствующих абстрактных методов.
Такую ошибку можно исправить с помощью средства "Переопределяющие методы", которое вызывается следующим образом:

Использование средства "Переопределяющие методы"

Требуемые реализации извлекаются при установке флажка "Показывать только абстрактные методы".

Отображение требуемых реализаций в списке

Выберите все три метода с помощью щелчка на узле и нажмите кнопку "ОК".

Автоматическая вставка требуемых реализаций

Теперь красная линия исчезла.

Фактически также требуется переопределить метод getColumnName(int param) - в противном случае невозможно получить настроенные заголовки таблицы.

Теперь заполним содержимое.
Для доступа к таблице "cars" указывается соответствующий код, поэтому номером столбца является 4.
Имена всех столбцов известны и могут вводиться напрямую.

В данном примере впервые используется Generics - новая функция JDK5.0. В NetBeans она работала успешно.

Создание класса формы JFrame - проекта формы

Теперь перейдем к созданию приложения формы JFrame, главному классу данного проекта. В новом мастере можно выбрать "Форма JFrame". В данном случае используется имя "InsertTable", создающее исходный файл "InsertTable.java".

Сначала необходимо спроектировать форму. Окно должно быть очень длинным, поэтому рекомендуется зафиксировать размер формы вместо использования "пакета".
Выберите "JFrame" в окне "Инспектор" для отображения свойств. Измените параметр "Политика размера формы" с "Создать pack()" (по умолчанию) на "Создать код изменения размера".

Фиксация размера формы

После этого появляется возможность изменения свойства "Размер формы". Измените его следующим образом:

Изменение свойства "Размер формы"

Это форма разделяется по вертикали на три части:

(1) JTextfield или JComboBox для ввода новых данных.
(2) JButton для отправки данных и просмотра сообщений.
(3) JTable.

Первые две части должны присутствовать на каждых JPanel и JTable на JScrollPane. Это базовые элементы.

JPanels и JScrollPane для определения местоположения компонентов.

Обратите внимание, что вертикальное расположение узлов не означает их фактические местоположения. Это значит, что dataPanel, sendPanel и tablePane расположены соответственно в северной, центральной и южной частях BorderLayout.

На dataPanel должны быть расположены три JTextField, одно JComboBox для ввода данных и 4 JLabel для пояснений. По мнению автора, лучшим решением для определения этих местоположений является GridLayout. Компоновка по умолчанию на JPanel в NetBeans - это FlowLayout. Ее необходимо изменить:

Изменение на GridLayout

После этого будут отображаться свойства GridLayout. Измените номер столбца на 2, а номер строки на 4.

Затем определите местоположение компонентов. При необходимости их можно перемещать с помощью перетаскивания на форме.

Перемещение JComboBox в пределах GridLayout

Компонент может быть перемещен в неправильной положение, например на другую панель. В таких случаях местоположение можно изменить также с помощью перетаскивания в окне "Инспектор".

Перемещение JComboBox в окне "Инспектор"

После настройки всех компонентов необходимо установить для них имена, отражающие их роли.
Также требуется настроить текстовые свойства для всех JLabel и удалить их для всех JTextField. Далее приведен пример редактирования свойства "Текст" для JLabel:

Настройка свойства "текст" для просмотра "ID:" в качестве JLabel

Затем выполните sendPanel для определения местоположения JButton и JLabel. Также для JPanel применяется GridLayout с одним столбцом и двумя строками. Имя и свойство "текст" настраиваются индивидуально.

Таким образом, все компоненты, кроме JTable, организуются следующим образом:

Компоненты без настройки JTable.

Настройка JTable

Как показано выше, на данном этапе JTable имеет структуру 4x4, данные в которой отсутствуют. Ее необходимо настроить для просмотра содержимого таблицы "cars" в базе данных MySQL.

Выберите JTable с именем "carTable" в окне "Инспектор" для просмотра свойств. Найдите свойство "model" и нажмите кнопку "..." справа.

carTable и свойство "model"

Откроется окно редактора. Затем в этом окне устанавливается структура по умолчанию 4x4. Попробуем изменить значение параметра "Выбрать режим" с "TableModelEditor" на "FormConnection".

Переключение с редактора модели таблицы по умолчанию на режим соединения форм

В режиме "Соединение форм" щелкните переключатель "Код пользователя" в окне параметров.

Режим соединения форм

Теперь обратим внимание на нижнюю часть окна. Здесь расположена кнопка "Расширенный". Нажмите ее.

Кнопка "Расширенный" в нижней части окна

Откроется окно для редактирования до и после кода установки TableModel для JTable. На этот раз для редактирования установите в нем оба флажка.

Метод getResultFromCars должен быть создан в исходном коде "InsertTable.java" вручную следующим образом:


 public ResultSet getResultFromCars() {
        
        ResultSet rs=null;
        
        try{
            rs=stmt.executeQuery("Select * from cars");
        
        }
        catch(SQLException e){}
        
        return rs;
        
    }

Для возврата к заполнению поля "Код пользователя" нажмите кнопку "ОК".

Обратите внимание на то, что в данном случае для завершения предложения НЕ СЛЕДУЕТ вводить точку с запятой (";"). Почему? Проверьте исходный код. Проверьте метод InitComponents(). Что мы видим здесь?

Светло-голубую область "Неизменяемый"? Теперь это не так. Наоборот, ее можно свободно редактировать с помощью NetBeans!

Первый запуск InsertTable

Для первого тестового запуска настроенной JTable необходимо выполнить следующее. В первую очередь, потребуется объявление.

private MyDBConnection mdbc;
private java.sql.Statement stmt;

Оно должно быть записано в любом месте исходного кода. Например, рядом с EOF и другими переменными.

Далее требуется конструктор. Обратите внимание на то, что к нему необходимо добавить временное объявление.

Это необходимо для исключения неприятной ошибки компиляции "java.sql.SQLException отсутствует в отчете...".

Полное содержимое конструктора выглядит следующим образом:

 
public InsertTable() throws  Exception{
        
         mdbc=new MyDBConnection();
         mdbc.init();
         Connection conn=mdbc.getMyConnection();
         stmt= conn.createStatement();
        
        initComponents();
    }

 

Кроме того, необходимо избежать все той же ошибки компиляции. Отредактируйте главный метод, подготовленный NetBeans:

Добавление блока try-catch в главный метод

Пришло время запускать проект! Может появиться окно для выбора главного класса. В списке присутствует только "InsertTable.class". Выберите его.

Отображение данных таблицы MySQL

Отображается единственная строка таблицы "cars" базы данных MySQL!

Немного внимания к деталям

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

Один из способов - правильное завершение работы приложения. Все сеансы с использованием MySQL должны быть закрыты.
Данное приложение завершает работу при обычном закрытии окна. Поэтому для события закрытия окна необходимо добавить способ обработки,
В окне "Инспектор" выберите "JFrame" для просмотра окна свойств, а затем выберите "События" для перехода к другой странице. Найдите событие "windowClosing". По умолчанию для него установлено значение <нет>, но при щелчке по этому слову оно автоматически меняется на "formWindowClosing". Выбрав эту строку, нажмите клавишу ВВОД.

Настройка события windowClosing для JFrame

Далее оказывается, что исходный код не позволяет изменить метод.

Редактирование метода "formWindowClosing"

Закройте оператор и соединение.

Также требуется установить элементы JComboBox, а именно typeCombo. В этом примере они позволяют выбрать тип привода автомобиля.

Выберите узел "typeCombo" в окне "Инспектор" для отображения свойств. Найдите свойство "model" и нажмите кнопку "..." справа, аналогично процедуре для параметра TableModel для JTable.
Появится соответствующее окно. На этот раз используется значение по умолчанию ComboBoxModelEditor.

Введите новый элемент в поле "Элемент:" и нажмите кнопку "Добавить". Это очень просто! В качестве типа привода можно выбрать элементы "FF", "FR", "MR" и "4WD". Какие еще возможности доступны?

Вставка данных к MySQL

Наконец, перейдем к последнему разделу. Вставка данных в MySQL возможна с помощью кнопки "Отправить" (JButton с именем "sendButton").

В редакторе GUI Editor NetBeans очень просто выбрать способ обработки событий для JButton. В форме достаточно дважды щелкнуть кнопку JButton.

В исходном файле будет создан метод "sendButtonActionPerformed" . Заполним содержимое следующим образом:

private void sendButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendButtonActionPerformed
        // TODO add your handling code here:
        
        String carid=idField.getText();
        String name=nameField.getText();        
        String vendor=vendorField.getText();
        String type=(String)typeCombo.getSelectedItem();
        
        String insertStr="";
        
        try{
            
            insertStr="insert into cars (carid, name, vendor, type) values("
                    +quotate(carid)+","
                    +quotate(name)+","
                    +quotate(vendor)+","
                    +quotate(type)
                    +")";
            
            int done=stmt.executeUpdate(insertStr);
            
            commentLabel.setText("1 row inserted");
           
            getContentPane().removeAll();
            initComponents();
        
        }
        catch(Exception e){
            commentLabel.setText("Error occurred in inserting data");
            e.printStackTrace();
        }
        
    }//GEN-LAST:event_sendButtonActionPerformed

Обратите внимание на то, что метод initComponents вызывается после вставки данных и после удаления текущей панели содержимого. Необходимо обновить внешний вид JTable. Теоретически возможно обновить не весь контейнер, а только JTable. Вспомним японскую поговорку: "нарезать тофу топором". К сожалению, автор этой статьи пока не нашел способ избежать этого.

Также обратите внимание на то, что в этом случае вызывается метод quotate. Он был создан, чтобы исключить большое количество кавычек:

 public String quotate(String content){

return "'"+content+"'";
}

Теперь полный код для InsertTable.java готов.

Проект можно запускать! Введите данные и нажмите кнопку "Отправить". Теперь на экране видна еще одна строка, вставленная в JTable. Повторите вставку еще несколько раз.

Работа с готовым приложением

Убедитесь в том, что все данные также доступны для просмотра из служебной программы NetBeans.

Итак, мы проделали серьезную работу! В рамках этого проекта читатели научились:

  • управлять базой данных из служебной программы NetBeans;
  • редактировать "защищенные" коды в светло-голубой области;
  • использовать настроенную TableModel для JTable;

и так далее.

 

By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2018, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo