Драйвера, соединения и запросы.
JDBC – это станд. прикл. интерфейс (API) языка Java для организации вз-я между приложением и СУБД. Это вз-е осущ-ся с пом драйверов JDBC, обеспечивающ реализацию общих интерфейсов для конкретных СУБД и конкр протоколов. В JDBC определяются четыре типа драйверов:
1. Тип1–драйвер,использующ др прикл интерфейс, в частн ODBC,для работы с СУБД(т.н. JDBC-ODBCмост).Станд драйвер типа1 sun.jdbc.odbc.JdbcOdbcDriver входит в JSDK.
2. Тип2 − драйвер, работающий через нативные библиотеки (т.е. клиента) СУБД.
3. Тип3 – драйвер, работающ по сетев и независ от СУБД протоколу с промежуточн java-сервером, кот в св очер подкл-ся к нужн СУБД.
4. Тип4 – сетев драйвер, работающ напрям с нужн СУБД и не требующ установки native-библиотек.
Приложение, работающее с БД, работает по следующей обычной послед-ти действий:
1. Загрузка класса драйвера БД при отсутствии экземпляра этого класса.
ДляСУБДMySQL:String driverName=”org.gjt.mm.mysql.Driver”;
ДляСУБДMsAccess:String driverName=”sun.jdbc.odbc.JdbcOdbcDriver ”;
После этого вып-ся загрузка драйвера в память:Class.forName(driverName);и ст-ся возм соед-е с СУБД.
2. Установка соединения с БД в виде:Connection cn=DriverManager.getConnection (“jdbc:mysql://localhost/mydb”,”login”,”pass”);
Или Connection cn=DriverManager.getConnection (“jdbc:odbc:Konditerskaya”);
В рез будет возвращен объект Connection и будет установлено соединение с соответствующей БД.
Класс DriverManager предоставл ср-ва для упр-я набором драйверов бд.Методу getConnection() необх передать тип и физич местораспол БД,а также логин и пароль для доступа. С пом registerDriver() драйвера рег-ся.
3. Создание объекта для передачи запросов: Statement st=cn.createStatement();
Могут прим-ся также операторы для выполнения подготовл запросов и хранимых процедур PreparedStatement и CallableStatement. Созданн объект можно исп-ть для выполнения запроса.
4. Выполнение запроса.Рез-ты вып-я запроса пом-ся в объект класса ResultSet:
ResutSet rs=st.executeQuery(“SELCT * FROM mytable”);
Для добавл-я или изм-я информ в таблице вместо executeQuery() запрос пом-ся в executeUpdate().
5. Обработка рез-в вып-я запроса произв-ся методами интерфейса ResultSet, где сам распростр являются next() и getString()…При первом вызове метода next() ук-ль перем-ся на таблицу рез-в выборки в позицию перв строки таблицы ответа. Когда строки зак-ся, метод возвр false.
6. Закрытие соединения cn.close();
91.DriverManager.
Драйверы бд JDBC определены классами, кот реализуют интерфейс Driver. Класс DriverManager отвеч за установл-е соед-ий с источн д-х. Если какой-либо драйв JDBC идентифицирован в сист св-ве " jdbc . drivers" на компе, то DriverManager буд пыт загруз его при св загрузке.
Сист св-ва в действит хр-ся в объекте Properties. Следует задать необх пары ключ/знач-е для объекта Properties. Можно задать сист св-во "jdbc.drivers",вызывая setProperty () для класса System, напр:System.setProperty("jdbc.drivers",
"sun.jdbc.odbc.JdbcOdbcDriver");
Перв арг-ключ для св-ва, кот будет задано, а втор—знач-е. Этот оператор идентифицирует драйв JDBC-ODBC Bridge в сист св-ве.
Класс Properties определ метод setProperty (), поэт если им-ся объект Properties, можно задав св-ва непосредств, вызывая этот метод.
При искл ситуац SecurityException можно загрузи драйв явно, вызывая стат метод forName () в классе Class и передавая объект String в кач арг-та, содержащ имя класса драйвера. Напр:
Class.forName("sun.j dbc.odbc.JdbcOdbcDriver") ;
// Загружает драйвер ODBC
вызов функц долж происх в блоке try с блоком catch(ClassNotFoundException).
Класс каждого драйвера обычно создает при загрузке экземпляр самого себя и регистрирует этот экземпляр, вызывая автоматически метод класса DriverManager. Все методы в классе DriverManager являются статическими.
Если необходимо соединение с драйвером JDBC, новый объект, инкапсулирующий соединение, не создается — для этого служит объект DriverManager. Класс DriverManager предоставляет несколько статических методов для создания объектов, реализующих интерфейс Connection, который мы сейчас получим,— он инкапсулирует соединение с базой данных. Все они являются перегруженными версиями метода getConnection ().