- •Лабораторна робота №1 Використання jdbc
- •Мета роботи:
- •1.2 Короткі теоретичні відомості
- •Інтерфейс java.Sql.Connection
- •Інтерфейс java.Sql.Statement
- •Інтерфейс java.Sql.PreparedStatement
- •Пакетне виконання sql запитів
- •Інтерфейс java.Sql.CallableStatement
- •Інтерфейс java.Sql.ResultSet
- •Інтерфейс javax.Sql.RowSet
- •Закриття об'єктів
- •Результати виконання лабораторної роботи у вигляді текстів методів main та результатів виконання запитів.
- •Результати виконання завдання для самостійної роботи у вигляді копій екранів для різних режимів роботи.
- •. Висновки
Інтерфейс javax.Sql.RowSet
Інтерфейс RowSet є спадкоємцем інтерфейсу ResultSet, тому функціонально ці інтерфейс и мають багато спільного.
Об’єкти RowSet відрізняються перш за все тим, що їх потрібно створювати, викликаючи конструктри класів, що реалізують інтерфейс RowSet, або його спадкоємців.
Друга особливість полягає у тому, що об’єкти RowSet завжди мають здатність до скролінгу і змін.
Окрім того, ці об’єкти здатні формувати події, пов’язані із зміною рядка, зміною значення, тощо. Тож ці об’єкти розглядаються як JavaBeans компоненти.
Об’єкти RowSet можна створювати як приєднаними до бази даних так і від’єднаними від неї.
Від’єднаний RowSet можна створити, наприклад, за допомогою конструктора класу com.sun.rowset.CachedRowSetImpl. Табличку ResultSet можна передати цьому об’єкту через метод populate().
Приєднаний RowSet можна створити за допомогою конструктора класу com.sun.rowset.JdbcRowSetImpl з параметром типу ResultSet.Але у цьому випадку об’єкт ResultSet має бути створено з налаштуваннями, що дозволяють скролінг та оновлення.
Можливі і прямі шляхи створення об’єкту RowSet шляхом передачі йому інформації про базу даних та запиту SQL. Відповідні методи можна знайти у вихідному тексті інтерфейсута класів.
Закриття об'єктів
Всі три класи Connection, Statement і ResultSet мають метод close (). Не всі реалізації JDBC вимагають закривати об'єкти перед повторним використанням, але є реалізації, що вимагають закривати об'єкти, тим самим звільняючи ресурси сервера БД. Тому прийнято закривати об'єкти після закінчення роботи з ними. Важливо пам'ятати, що якщо закривається об'єкт Connection, то автоматично закриваються всі пов'язані з ним об'єкти Statement. Аналогічно при закритті об'єкта Statement закриваються всі пов'язані з ним об'єкти ResultSet. При закритті з'єднання всі не збережені дані останньої відкритої транзакції будуть втрачені.
Результати виконання лабораторної роботи у вигляді текстів методів main та результатів виконання запитів.
Код програми:
Connect.java
package das;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.DefaultListModel;
import java.sql.Connection;
import java.sql.SQLException;
public class Connect {
Connection conn = null;
public DefaultListModel<String> listModel = new DefaultListModel<String>();
//метод создания подключения
public Connection getConnect (String log, String pass){
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
Messagwindow error2 = new Messagwindow();
error2.messagwindow(e.getMessage());
}
try {
//Создаем подключение
conn = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/BookShop", log, pass);
} catch (SQLException e) {
Messagwindow error2 = new Messagwindow();
error2.messagwindow(e.getMessage());
}
return conn; }
//Создаем метод по выводу данных из БД
public void request (String b){
try {
//Создаем Statement
Statement st = conn.createStatement();
//Создаем ResultSet
ResultSet rs = st.executeQuery(b);
while (rs.next()) {
String str = rs.getString(1) +":" + rs.getString(2)+ ":" + rs.getString(3);
listModel.addElement(str);
}
rs.close();
st.close();
} catch (Exception e) {
Messagwindow error = new Messagwindow();
error.messagwindow(e.getMessage());}
}
//Создаем метод по обновлению данных в БД
public int add (String b, int a) {
try {
//Создаем Statement
Statement st = conn.createStatement();
st.executeUpdate(b);
st.close();
} catch (SQLException e) {
e.printStackTrace();
Messagwindow error1 = new Messagwindow();
error1.messagwindow(e.getMessage());
a=1;
}
return a; }
//метод закрытия подключения
public void closedConnect (){
try{
if(conn != null){conn.close();}
}catch (SQLException e){
Messagwindow error2 = new Messagwindow();
error2.messagwindow(e.getMessage());
}
}
}
Messagwindow.java
package das;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Messagwindow {
public void messagwindow (String b){
JFrame messag = new JFrame ("Сообщеие");
messag.setBounds(10, 100, 500, 300);
messag.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
messag.getContentPane().setLayout(null);
messag.setVisible(true);
//Создание надписи
JLabel l1 = new JLabel(b);
l1.setForeground(Color.RED);
l1.setBounds(3, 3, 500, 300);
messag.getContentPane().add(l1);
}
}
__________________________________________________________________________________________________
Main.java
package das;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class man {
public static void main(String[] args) {
Connect f = new Connect();
//Создаем окно подключения
JFrame frame = new JFrame("Login");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
frame.setVisible(true);
//создание надписи "Username:"
JLabel l1 = new JLabel("Username:");
l1.setForeground(Color.GRAY);
l1.setBounds(15, 76, 65, 14);
frame.getContentPane().add(l1);
//создание надписи "Password:"
JLabel l2 = new JLabel("Password:");
l2.setForeground(Color.GRAY);
l2.setBounds(15, 108, 65, 14);
frame.getContentPane().add(l2);
//создание поля ввода "Username:"
JTextField t1 = new JTextField(20);
t1.setBounds(80, 73, 90, 20);
frame.getContentPane().add(t1);
//создание поля ввода "Password:"
JPasswordField t2 = new JPasswordField(20);
t2.setBounds(80, 108, 90, 20);
frame.getContentPane().add(t2);
//создаем кнопку "Login"
JButton b1 = new JButton("Login");
b1.setBounds(80, 143, 90, 20);
frame.getContentPane().add(b1);
// Создание рабочего окна
JFrame framework = new JFrame("Окно запросов");
framework.setBounds(50, 50, 800, 500);
framework.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
framework.getContentPane().setLayout(null);
//Создаем слушателя кнопки "Логин"
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0)
{ f.getConnect(t1.getText(), t2.getText());
if (f.getConnect(t1.getText(), t2.getText())!= null)
{//Запуск нового окна
frame.dispose();
framework.setVisible(true);
}
Else
{//Вывод окна с ошибкой подключения
JFrame frame1 = new JFrame("Connection");
frame1.setBounds(50, 50, 400, 150);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.getContentPane().setLayout(null);
frame1.setVisible(true);
JLabel l3 = new JLabel("ERROR: connection to database!");
l3.setForeground(Color.RED);
l3.setBounds(5, 15, 350, 60);
frame1.getContentPane().add(l3);
}
}
});
// Создание кнопки в рабочем окне "Поиск"
JButton buttonSerch= new JButton("Поиск");
buttonSerch.setBounds(600, 11, 120, 40);
framework.getContentPane().add(buttonSerch);
// Создание кнопки в рабочем окне "Изменить"
JButton buttonAdd= new JButton("Изменить");
buttonAdd.setBounds(600, 51, 120, 40);
framework.getContentPane().add(buttonAdd);
// Создание кнопки в рабочем окне "Выход"
JButton buttonExit= new JButton("Выход");
buttonExit.setBounds(600, 131, 120, 40);
framework.getContentPane().add(buttonExit);
// Создание надписи в рабочем окне "Текст запроса"
JLabel labelw = new JLabel("Текст запроса");
labelw.setBounds(10, 11, 89, 25);
framework.getContentPane().add(labelw);
//Создание текстового поля "Текст запроса"
JTextField textw1 = new JTextField();
textw1.setBounds(10, 29, 540, 40);
framework.getContentPane().add(textw1);
textw1.setColumns(10);
//Создание надписи в рабочем окне "Результат"
JLabel labelw1 = new JLabel("Результат");
labelw1.setBounds(10, 89, 60, 14);
framework.getContentPane().add(labelw1);
JPanel resultPanel = new JPanel();
resultPanel.setBounds(10, 109, 540, 200);
resultPanel.setLayout(new BoxLayout(resultPanel, BoxLayout.Y_AXIS));
JList resultList = new JList(f.listModel);
resultList.setVisibleRowCount(0);
resultList.setLayoutOrientation(JList.VERTICAL);
JScrollPane resultScroll = new JScrollPane(resultList);
resultScroll.setPreferredSize(new Dimension(100, 100));
resultPanel.add(resultScroll);
framework.getContentPane().add(resultPanel);
//включаем слушатель для кнопки "Поиск"
buttonSerch.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try{
f.listModel.removeAllElements();
f.request(textw1.getText());
} catch (Exception e){
e.printStackTrace();
Messagwindow error = new Messagwindow();
error.messagwindow(e.getMessage());
}
}
});
//включаем слушатель для кнопки "Изменить"
buttonAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int a=0;
try{
f.listModel.removeAllElements();
if (f.add(textw1.getText(), a)==0){
//Сообщение об успешном выполнении запроса
Messagwindow ok = new Messagwindow();
ok.messagwindow("Запрос выполнен успешно!!!");
}
}catch (Exception e1){
e1.printStackTrace();
Messagwindow error1 = new Messagwindow();
error1.messagwindow(e1.getMessage());
}
}
});
//Включаем слушатель для кнопки "Выход"
buttonExit.addActionListener (new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
f.closedConnect();
framework.setVisible(false);
System.exit(0);
}
});
}
}
