Приложение, работающее с БД, работает по следующей обычной последовательности действий:
1. Загрузка класса драйвера БД при отсутствии экземпляра этого класса.
Для СУБД MySQL:
String driverName=”org.gjt.mm.mysql.Driver”;
Для СУБД MsAccess:
String driverName=”sun.jdbc.odbc.JdbcOdbcDriver ”;
После этого выполняется собственно загрузка драйвера в память:
Class.forName(driverName);
и становится возможным соединение с СУБД.
Эти же действия можно выполнить, импортируя библиотеку и создавая объект явно:
Import COM.ibm.db2.jdbc.net.DB2Driver;
а затем
new Db2Driver();
для СУБД DB2.
2. Установка соединения с БД в виде:
Connection cn=
DriverManager.getConnection
(“jdbc:mysql://localhost/mydb”,”login”,”pass”);
или
Connection cn=
DriverManager.getConnection(“jdbc:odbc:Konditerskaya”);
В результате будет возвращен объект Connection и будет установлено соединение с соответствующей БД.
Класс DriverManager предоставляет средства для управления набором драйверов баз данных. Методу getConnection() необходимо передать тип и физическое месторасположение БД, а также логин и пароль для доступа. С помощью метода registerDriver() драйверы регистрируются, а методом getDrivers() можно получить список всех драйверов.
|
|
3. Создание объекта для передачи запросов
Statement st=cn.createStatement();
Объект класса Statement используется для выполнения запроса без его предварительной подготовки и команд SQL. Могут применяться также операторы для выполнения подготовленных запросов и хранимых процедур PreparedStatement и CallableStatement. Созданный объект можно использовать для выполнения запроса.
4. Выполнение запроса
Результаты выполнения запроса помещаются в объект класса ResultSet:
ResutSet rs=st.executeQuery(“SELCT * FROM mytable”);
Для добавления или изменения информации в таблице вместо метода executeQuery() запрос помещается в метод executeUpdate().
5. Обработка результатов выполнения запроса производится методами интерфейса ResultSet, где самыми распространенными являются next() и getString() и аналогичные методы, начинающиеся с getТип() и updateТип(). Среди них следует выделить методы getClob() и getBlob(), позволяющие извлекать из полей таблицы специфические объекты (Character Large Object, Binary Large Object), которые могут быть, например, графическими или архивными файлами. Эффективным способом извлечения значения поля из таблицы является обращение к этому полю по его позиции в строке.
При первом вызове метода next() указатель перемещается на таблицу результатов выборки в позицию первой строки таблицы ответа. Когда строки закончатся, метод возвратит false.
6. Закрытие соединения
cn.close();
Если база больше не нужна, соединение закрывается.
Следующий пример демонстрирует консольное приложение для работы с БД. Создается консольное приложение, которое связывается с базой данных, реализованной в Microsoft Access. В БД в одной табличке хранится информация о кондитерском ассортименте. Программа выводит информацию, хранимую в таблице, добавляет записи, удалять и редактирует их.
|
|
Пример 4.1
Листинг DBClass.java
import java.awt.*; // импортирование пакета awt
import java.net.*; // импортирование пакета для работы в сети
import java.sql.*; // импортирование пакета sql
import java.io.*; // импортирование пакета ввода-вывода
public class DBClass{ // объявление класса DBClass
static void menu(){// объявление метода menu ()
// вывод на консоль пунктов меню
System.out.println("Vyberite punkt menu:");
System.out.println("1-Prosmotr assortimenta");
System.out.println("2-Vstavka");
System.out.println("3-Udalenie");
System.out.println("4-Redaktirovanie");
System.out.println("5-Vyhod");
}
public static void main(String args[]){// объявление метода main ()
// объявление переменных
String nazv, cena, naim; int massa;
// создание буферизированного символьного потока ввода
BufferedReader stdin = new BufferedReader(new
InputStreamReader(System.in));
BufferedReader in=new BufferedReader(new
InputStreamReader(System.in));
String url="jdbc:odbc:Konditerskaya";// ссылка на драйвер базы данных
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// подключение
//интерфейса JAVA-ODBC, без которого JAVA не сможет связаться
//с установленным ODBC-драйвером.
Connection db=DriverManager.getConnection(url); // установление
//соединения с базой данных
while(true){//бесконечный цикл
menu();//вывод пунктов меню
Statement sq=db.createStatement();//cоздание объекта
//для передачи запросов
String vybor = stdin.readLine();// чтение строки, вводимой с клавиатуры
if(vybor.equalsIgnoreCase("1")){// выполнение, если введено «1»
// формирование строки запроса
String sq_str="SELECT * FROM Assortiment";
ResultSet rs= sq.executeQuery(sq_str); // команда на выполнение запроса
System.out.println("|Naimenovanie\t|Nazvanie\t|Massa\t|Cena|");
while(rs.next()){// начало цикла для доступа к найденным записям
nazv=rs.getString("Nazvanie");// возвращает содержимое поля Nazvanie
cena=rs.getString("Cena");// возвращает содержимое поля Cena
// возвращает содержимое поля Naimenovanie
naim=rs.getString("Naimenovanie");
// возвращает содержимое поля Massa
massa=rs.getShort("Massa");
System.out.println("|"+naim+"\t|"+nazv+"\t|"+cena+"\t|"+massa+"\t|");
} }
else if (vybor.equalsIgnoreCase("2")){// выполнение, если введено «2»
System.out.println("Mogete dobavit' novuyu produkciyu:");
System.out.println("Vvedite naimenovanie:");
naim=in.readLine();// чтение наименования, вводимого с клавиатуры
System.out.println("Vvedite nazvanie:");
nazv=in.readLine();// чтение названия, вводимого с клавиатуры
System.out.println("Vvedite cenu:");
cena=in.readLine();// чтение цены, вводимой с клавиатуры
System.out.println("Vvedite massu:");
// чтение массы, вводимой с клавиатуры
massa=Integer.parseInt(in.readLine());
// формирование строки запроса
String sq_str="INSERT INTO Assortiment VALUES ('"+naim+"','"+nazv+"','"+
cena+"',"+massa+")";
int rs= sq.executeUpdate(sq_str); // команда на выполнение запроса
}
else if (vybor.equalsIgnoreCase("3")){// выполнение, если введено «3»
System.out.println("Mogete udalit' assortiment:");
System.out.println("Vvedite naimenovanie assortimenta:");
naim=in.readLine();// чтение наименования, вводимого с клавиатуры
// формирование строки запроса
String sq_str="DELETE FROM Assortiment WHERE Naimenovanie ='"+naim+"'";
int rs= sq.executeUpdate(sq_str); // команда на выполнение запроса
}
else if (vybor.equalsIgnoreCase("4")){ // выполнение, если введено «4»
String vibor;
System.out.println("Vvedite naimenovanie assortimenta,kotoroe hotite redaktirovat");
vibor=in.readLine();// чтение наименования, вводимого с клавиатуры
System.out.println("Vvedite novoe naimenovanie:");
naim=in.readLine();// чтение наименования, вводимого с клавиатуры
System.out.println("Vvedite novoe nazvanie:");
nazv=in.readLine();// чтение названия, вводимого с клавиатуры
System.out.println("Vvedite novuju cenu:");
cena=in.readLine();// чтение цены, вводимой с клавиатуры
System.out.println("Vvedite novuju massu:");
// чтение массы, вводимой с клавиатуры
massa=Integer.parseInt(in.readLine());
// формирование строки запроса
String sq_str="UPDATE Assortiment SET Naimenovanie='"+naim+
"',Nazvanie='"+nazv+"',Cena='"+cena+"',Massa="+massa+
" WHERE Naimenovanie='"+vibor+"'";
int rs= sq.executeUpdate(sq_str); // команда на выполнение запроса
}
else if (vybor.equalsIgnoreCase("5")){// выполнение, если введено «5»
|
|
db.close();//закрытие соединения
System.exit(0);//выход из программы
}
}
}
catch(Exception e){
System.out.println("Error"+e);
}
}
}
Для запуска приложения необходимо сначала в Microsoft Access создать таблицу Assortiment, которая должна содержать следующие поля (табл. 4.1):
Таблица 4.1
Описание таблицы Assortiment
Имя поля | Тип данных |
Naimenovanie | Текстовый |
Nazvanie | Текстовый |
Cena | Денежный |
Massa | Числовой |
Далее необходимо заполнить таблицу данными, например (табл. 4.2):
Таблица 4.2
Данные таблицы Assortiment
Naimenovanie | Nazvanie | Cena | Massa |
Tort | Napoleon | 50,00р. | 2000 |
Pirognoe | Oduvanchik | 5,00р. | 100 |
Rulet | Oreshek | 10,00р. | 500 |
Pirognoe | Zavarnoe | 4,00р. | 150 |
Файл базы данных необходимо сохранить на диске, например, d:\db1.mdb. Далее следует прописать имя источника данных. Для этого необходимо выбрать «Пуск® Настройка® Панель управления® Администрирование® Источники данных (ODBC)». Появится окно «ODBC Data Source Administrator». В этом окне необходимо нажать кнопку «Add». В появившемся окне выбрать драйвер, для которого необходимо прописать имя источника данных. В данном случае необходимо выбрать «Driver do Microsoft Access (*.mdb)» и нажать кнопку «Готово». В появившемся окне «Установка драйвера ODBC для Microsoft Access» в поле «Имя источника данных» прописать «Konditerskaya». Потом нажать кнопку «Выбрать» и выбрать мышкой сам файл d:\db1.mdb. После выполнения необходимо нажать кнопку «OK».
Далее необходимо запустить саму программу. Появится следующее:
Vyberite punkt menu:
1-Prosmotr assortimenta
2-Vstavka
3-Udalenie
4-Redaktirovanie
5-Vyhod
Введем например «1». Появится
|Naimenovanie |Nazvanie |Massa |Cena|
|Tort |Napoleon |50.0000 |2000 |
|Pirognoe |Oduvanchik |5.0000 |100 |
|Rulet |Oreshek |10.0000 |500 |
|Pirognoe |Zavarnoe |4.0000 |150 |
Vyberite punkt menu:
1-Prosmotr assortimenta
2-Vstavka
3-Udalenie
4-Redaktirovanie
5-Vyhod
Далее, выбирая соответствующие пункты меню, можно добавить, удалить, отредактировать записи таблицы. После выбора пункта «5» приложение завершит свое выполнение.