Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторна робота №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.