Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Бази даних / lab11

.docx
Скачиваний:
49
Добавлен:
05.03.2016
Размер:
205.12 Кб
Скачать

Лабораторна робота №11

Тема: Розробка програмного забезпечення на мові Java для роботи з MySQL.

Мета: Набути навичок по написанню програм на мові Java, які взаємодіють з сервером MySQL при допомозі JDBC.

Завдання: Розробити для створеної БД клієнтську программу з графічним інтерфейсом (GUI), яка підключатиметься до сервера БД і на вимогу користувача, може здійснює вибірку даних з БД та додавати/видаляти/змінювати записи.

Хід роботи:

Розробка програми здійснюється в середовищі Eclipse. Для роботи з базою даних завантажую драйвер JDBC із офіційного сайту MySQL, назва драйвера com.mysql.jdbc.Driver. Даний файл повинен знаходитись поруч із файлом java при запуску програми так як программа буде звертатись в данному випадку до драйвера динамічно підчас виконання.

База даних із якою буде працювати програма в даному випадку має наступну структуру див. рисунок 1.

Рисунок 1 – Структура бази даних

Завантаження драйвера і зєднання із базою реалізоване в окремому методі класу і викликається при необхідності.

Метод забезпечення зєднання має наступний код:

public void connect() {

try {

String urlstring="jar:file:///c:/com.mysql.jdbc_5.1.5.jar!/";

URLClassLoader cl = new URLClassLoader

(new URL[]{new URL(urlstring)});

cl.loadClass("com.mysql.jdbc.Driver").newInstance();

} catch (Exception ex ){

JOptionPane.showMessageDialog(new JFrame(), "Error step1");

}

try {

String url = "jdbc:mysql://127.0.0.1/javtest";

String login = "javtest";

String passwd = "12345678";

conn = DriverManager.getConnection(url, login, passwd);

MyFrame.tex("Зєднання із базою даних встановлено ...");

} catch (SQLException ex) {

MyFrame.tex("Помилка зєднання... Перевірте налаштування (((");

}

}

Також кожна функція програми: запис, вставлення запису, видалення та ін.. реалізовані в окремих методах що забезпечує об’єктно – орієнтовний підхід до написання.

Для реалізації інтерфейсу GUI в javа використано стандартні компоненти бібліотек Swing* .

Код реалізації графічного інтерфейсу користувача за обробки подій:

package testing;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;

import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JRadioButton;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.JComboBox;

import javax.swing.JTextArea;

import javax.swing.JTextField;

public class inter {

public static void main(String[] args) {

MyFrame frame= new MyFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // задаємо дії при закритті фрейму

frame.setVisible(true);

}

}

class MyFrame extends JFrame

{

public static final int FRAME_WIDTH=600;

public static final int FRAME_HEIGHT=450;

public static final JPanel panel = new JPanel();

static String mas[] = {"Id","Дата","Рахунок","Категорія","Підкатегорія","Сума"} ;

String mmm[][] = {

{"Id","Дата","Рахунок","Категорія","Підкатегорія","Сума"}

};

public MyFrame() {

setSize(FRAME_WIDTH,FRAME_HEIGHT);

this.add(panel);

panel.setLayout(null);

JButton button = new JButton("Перегляд");

panel.add(button);

button.setBounds(10, 10, 100, 30) ;

EventListener buttonAction = new EventListener(1);

button.addActionListener(buttonAction);

JButton button1 = new JButton("Фільтр");

panel.add(button1);

button1.setBounds(120, 10, 100, 30) ;

EventListener button1Action = new EventListener(2);

button1.addActionListener(button1Action);

JButton button2 = new JButton("Додати запис");

panel.add(button2);

button2.setBounds(240, 10, 100, 30) ;

EventListener button2Action = new EventListener(3);

button2.addActionListener(button2Action);

JButton button3 = new JButton("Оновити");

panel.add(button3);

button3.setBounds(360, 10, 100, 30) ;

EventListener button3Action = new EventListener(4);

button3.addActionListener(button3Action);

JButton button4 = new JButton("Видалити");

panel.add(button4);

button4.setBounds(480, 10, 100, 30) ;

EventListener button4Action = new EventListener(5);

button4.addActionListener(button4Action);

refresh();

tex("???");

}

static void refresh() {

JTable jTabPeople = new JTable(BDConnect.mmm, mas);

JScrollPane jscrlp = new JScrollPane(jTabPeople);

jscrlp.setBounds(15, 100, 550, 200);

jTabPeople.setPreferredScrollableViewportSize(new Dimension(250, 100));

panel.add(jscrlp);

}

static void tex(String ss) {

JLabel label = new JLabel();

JTextArea tex = new JTextArea();

panel.add(tex);

panel.add(label);

label.setBounds(15,300, 200, 20);

tex.setBounds(15,320, 550, 20);

label.setText("Статус зєднання:");

tex.setText(ss);

}

}

class frame_one extends JDialog { //вікно Фільтр

public static final int FRAME_WIDTH=500;

public static final int FRAME_HEIGHT=300;

public frame_one() {

setSize(FRAME_WIDTH,FRAME_HEIGHT);

JPanel panel = new JPanel();

JLabel label = new JLabel();

this.add(panel);

panel.setLayout(null);

JButton button = new JButton("ОК");

panel.add(button);

label.setBounds(5, 5, 300, 30);

label.setText("Виберіть критерій для виведення інформації:");

panel.add(label);

button.setBounds(100, 220, 100, 30) ;

ButtonGroup radioGroup=new ButtonGroup();

final JRadioButton radioButton = new JRadioButton("Вив. за назв. Кат.");

radioGroup.add(radioButton);

panel.add(radioButton);

radioButton.setBounds(10, 40, 200, 30);

final JComboBox combo = new JComboBox();

panel.add(combo);

combo.setBounds(220, 45, 120, 20);

final BDConnect c = new BDConnect();

c.category("SELECT * FROM categ");

for(int i = 0 ; i<100; i++) {

combo.addItem(c.cat[i]);

}

for(int i = 0 ; i<100; i++) {

c.cat[i] ="";

}

final JComboBox combo_two = new JComboBox();

panel.add(combo_two);

combo_two.setBounds(220, 67, 120, 20);

c.category("SELECT * FROM rahunok");

for(int i = 0 ; i<100; i++) {

combo_two.addItem(c.cat[i]);

}

final JRadioButton radioButton1 = new JRadioButton("Вив. за рахун.");

radioGroup.add(radioButton1);

panel.add(radioButton1);

radioButton1.setBounds(10, 65, 200, 30);

final JRadioButton radioButton2 = new JRadioButton("Вив. в пор. зростання суми");

radioGroup.add(radioButton2);

panel.add(radioButton2);

radioButton2.setBounds(10, 90, 200, 30);

final JRadioButton radioButton3 = new JRadioButton("Вив. в пор. спад. суми");

radioGroup.add(radioButton3);

panel.add(radioButton3);

radioButton3.setBounds(10,115, 200, 30);

button.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event)

{

if (radioButton.isSelected()) {

String zapr = "SELECT * FROM cash WHERE cat_poz='"+combo.getSelectedItem().toString()+"'";

c.quer(zapr); MyFrame.refresh();

MyFrame.tex("Виведено за категорією ...");

}

if (radioButton1.isSelected()) {

String zapr = "SELECT * FROM cash WHERE rahunok='"+ combo_two.getSelectedItem().toString()+"'";

c.quer(zapr); MyFrame.refresh();

MyFrame.tex("Виведено за рахунком ...");

}

if (radioButton2.isSelected()) {

String zapr = "SELECT * FROM cash ORDER BY sum asc";

c.quer(zapr); MyFrame.refresh();

MyFrame.tex("Виведено в порядку зростання суми ...");

}

if (radioButton3.isSelected()) {

String zapr = "SELECT * FROM cash ORDER BY sum desc ";

c.quer(zapr); MyFrame.refresh();

MyFrame.tex("Виведено в порядку спадання суми ...");

}

dispose();

}

});

}

// end frame Filtr

//Вікно Додати

}

class frame_update extends JDialog {

public static final int FRAME_WIDTH=370;

public static final int FRAME_HEIGHT=200;

public frame_update() {

setSize(FRAME_WIDTH,FRAME_HEIGHT);

JPanel panel = new JPanel();

JLabel label = new JLabel();

JLabel label1 = new JLabel();

this.add(panel);

panel.setLayout(null);

JButton button = new JButton("ОК");

panel.add(button);

label.setBounds(5, 5, 300, 30);

label.setText("Оновлення запису:");

label1.setText("Введіть id запису для оновлення:");

panel.add(label);

panel.add(label1);

label1.setBounds(5, 50, 200, 20);

button.setBounds(100, 120, 100, 30) ;

final JTextField id= new JTextField();

panel.add(id);

id.setBounds(220, 50, 80, 20);

final JTextField data = new JTextField();

panel.add(data);

data.setBounds(5, 90, 50, 20);

data.setText("Дата");

final JComboBox combo = new JComboBox();

panel.add(combo);

combo.setBounds(55, 90, 80, 20);

final BDConnect c = new BDConnect();

c.category("SELECT * FROM rahunok");

for(int i = 0 ; i<100; i++) {

combo.addItem(c.cat[i]);

}

for(int i = 0 ; i<100; i++) {

c.cat[i] ="";

}

final JComboBox combo_two = new JComboBox();

panel.add(combo_two);

combo_two.setBounds(135, 90, 80, 20);

c.category("SELECT * FROM categ");

for(int i = 0 ; i<100; i++) {

combo_two.addItem(c.cat[i]);

}

final JTextField podcateg = new JTextField();

panel.add(podcateg);

podcateg.setBounds(215, 90, 70, 20);

podcateg.setText("Підкатего.");

final JTextField sum = new JTextField();

panel.add(sum);

sum.setBounds(285,90, 60, 20);

sum.setText("Сумма");

button.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event)

{

String ss = "UPDATE cash SET "

+ "data='"+data.getText().toString()+"',"

+ "rahunok='"+combo.getSelectedItem().toString()+"',"

+ "cat_poz='"+combo_two.getSelectedItem().toString()+"',"

+ "sec_cat_poz='"+podcateg.getText().toString()+"',"

+ "sum='"+sum.getText().toString()+"' "

+ "WHERE id='"+id.getText().toString()+"'";

c.add(ss);

dispose();

}

});

}

}

class frame_del extends JDialog {

public static final int FRAME_WIDTH=370;

public static final int FRAME_HEIGHT=200;

final BDConnect c = new BDConnect();

public frame_del() {

setSize(FRAME_WIDTH,FRAME_HEIGHT);

JPanel panel = new JPanel();

JLabel label = new JLabel();

JLabel label1 = new JLabel();

this.add(panel);

panel.setLayout(null);

JButton button = new JButton("ОК");

panel.add(button);

label.setBounds(5, 5, 300, 30);

label.setText("Вилалення запису:");

label1.setText("Введіть id запису для видалення:");

panel.add(label);

panel.add(label1);

label1.setBounds(5, 50, 200, 20);

button.setBounds(100, 120, 100, 30) ;

final JTextField id= new JTextField();

panel.add(id);

id.setBounds(220, 50, 80, 20);

button.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event)

{

String ss = "DELETE FROM cash WHERE id="+id.getText().toString()+"";

c.add(ss);

dispose();

}

});

}}

class frame_add extends JDialog {

public static final int FRAME_WIDTH=370;

public static final int FRAME_HEIGHT=300;

public frame_add() {

setSize(FRAME_WIDTH,FRAME_HEIGHT);

JPanel panel = new JPanel();

JLabel label = new JLabel();

this.add(panel);

panel.setLayout(null);

JButton button = new JButton("ОК");

panel.add(button);

label.setBounds(5, 5, 300, 30);

label.setText("Вставити запис:");

panel.add(label);

button.setBounds(100, 220, 100, 30) ;

ButtonGroup radioGroup=new ButtonGroup();

final JRadioButton radioButton = new JRadioButton("Додати Рахунок");

radioGroup.add(radioButton);

panel.add(radioButton);

radioButton.setBounds(10, 40,150, 30);

final JTextField rah = new JTextField();

panel.add(rah);

rah.setBounds(200, 45, 80, 20);

final JTextField cat = new JTextField();

panel.add(cat);

cat.setBounds(200, 65, 80, 20);

//--------------------------------------------------

final JTextField data = new JTextField();

panel.add(data);

data.setBounds(5, 150, 50, 20);

data.setText("Дата");

final JComboBox combo = new JComboBox();

panel.add(combo);

combo.setBounds(55, 150, 80, 20);

final BDConnect c = new BDConnect();

c.category("SELECT * FROM rahunok");

for(int i = 0 ; i<100; i++) {

combo.addItem(c.cat[i]);

}

for(int i = 0 ; i<100; i++) {

c.cat[i] ="";

}

final JComboBox combo_two = new JComboBox();

panel.add(combo_two);

combo_two.setBounds(135, 150, 80, 20);

c.category("SELECT * FROM categ");

for(int i = 0 ; i<100; i++) {

combo_two.addItem(c.cat[i]);

}

final JTextField podcateg = new JTextField();

panel.add(podcateg);

podcateg.setBounds(215, 150, 70, 20);

podcateg.setText("Підкатего.");

final JTextField sum = new JTextField();

panel.add(sum);

sum.setBounds(285,150, 60, 20);

sum.setText("Сумма");

final JRadioButton radioButton1 = new JRadioButton("Додати Категорію");

radioGroup.add(radioButton1);

panel.add(radioButton1);

radioButton1.setBounds(10, 67, 150, 30);

final JRadioButton radioButton2 = new JRadioButton("Додати запис");

radioGroup.add(radioButton2);

panel.add(radioButton2);

radioButton2.setBounds(10, 90, 200, 30);

button.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event)

{

if (radioButton.isSelected()) {

String zapr = "INSERT INTO rahunok (`id`,`cat`,`key`) VALUES (NULL,'"+rah.getText().toString()+"',1)";

c.add(zapr);

}

if (radioButton1.isSelected()) {

String zapr = "INSERT INTO categ (`id`,`cat`,`p_key`) VALUES (NULL,'"+cat.getText().toString()+"',1)";

c.add(zapr);

}

if (radioButton2.isSelected()) {

String zapr = "INSERT INTO cash (`id`,`data`,`rahunok`,`cat_poz`,`sec_cat_poz`,`kolit`,`izmir`,`sum`) VALUES (NULL,'"+data.getText().toString()+"','"+combo.getSelectedItem().toString() +"','"+combo_two.getSelectedItem().toString()+"','"+podcateg.getText().toString()+"',1,1,'"+sum.getText().toString()+"')";

c.add(zapr);

}

}

});

}}

class EventListener implements ActionListener{

private int number;

public EventListener(int namber) {

number=namber;

}

public void actionPerformed(ActionEvent event) {

BDConnect c = new BDConnect();

if (number==1)

{

c.quer("SELECT * FROM cash");

MyFrame.refresh();

}

if (number == 2 ) {

frame_one frame1 = new frame_one();

frame1.setVisible(true);

}

if (number == 3 ) {

frame_add frame2 = new frame_add();

frame2.setVisible(true);

}

if (number == 4 ) {

frame_update frame4 = new frame_update();

frame4.setVisible(true);

}

if (number == 5 ) {

frame_del frame3 = new frame_del();

frame3.setVisible(true);

}

}

}

Методи виконання запитів реалізовані у окремому класі BDConnect. Код классу :

package testing

import java.net.URL;

import java.net.URLClassLoader;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.*;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import com.mysql.jdbc.Statement;

public class BDConnect {

public static String[][] mmm = new String[100][6];

public static String[] cat= new String[100];

Connection conn;

public void quer( String qer) {

try {

connect();

Statement stm = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet res = stm.executeQuery(qer);

int i=0; obnul();

while (res.next()) {

String id = res.getString("id");

String data= res.getString("data");

String rahunok= res.getString("rahunok");

String categori= res.getString("cat_poz");

String podkategori= res.getString("sec_cat_poz");

String suma= res.getString("sum");

mmm[i][0]=id;

mmm[i][1]=data;

mmm[i][2]=rahunok;

mmm[i][3]=categori;

mmm[i][4]=podkategori;

mmm[i][5]=suma;

i++;

}

conn.close();

}

catch(SQLException ex) {

MyFrame.tex("Помилка при завантажені інформації");

}

}

public void category(String qer) {

try {

connect();

Statement stm = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet res = stm.executeQuery(qer);

int i=0;

while (res.next()) {

cat[i]= res.getString("cat");

i++;

}

conn.close();

}

catch(SQLException ex) {

MyFrame.tex("Помилка при загрузці категорій");

}

}

private void obnul() {

for (int i=0; i<100; i++)

{

mmm[i][0]=" ";

mmm[i][1]=" ";

mmm[i][2]=" ";

mmm[i][3]=" ";

mmm[i][4]=" ";

mmm[i][5]=" ";

}

}

public void add(String qer) {

try {

connect();

Statement stm = (Statement) conn.createStatement();

int res = stm.executeUpdate(qer);

if (res>0) {

JOptionPane.showMessageDialog(new JFrame(), "Запит викоонано");

}

}

catch(SQLException ex) {

JOptionPane.showMessageDialog(new JFrame(), "Помилка виконання запиту");

}

}

}

Після написання експортую проект у java файл, для запуску програми потрібно щоб на машині був встановлений JRE і сервер локальних баз даних.

Після запуску виводиться головне вікно рисунок 1.

Рисунок 2 – Головне вікно програми

Після натиснення кнопки Перегляд оновляються записи в таблиці. Кнопка фільтр викликає вікно (рис. 3) в якому можна вибрати параметри вибірки. Кнопка Додати запис викликає вікно додавання нового запису, категорії, рахунка (рисунок 4). Кнопка Оновити і Видалити – оновити запис в таблиці по id (рисунок 5) і видалити запис по id (рисунок 6) відповідно.

Рисунок 3 – Вікно параметрів вибірки

Рисунок 4 – Вікно додавання запису в базу

Рисунок 5 – Вікно оновлення запису

Рисунок 6 – Вікно видалення запису

Висновок: Набув навичок по написанню програм на мові Java, які взаємодіють з сервером MySQL при допомозі JDBC.

Соседние файлы в папке Бази даних