
Season 2 - Java Database Connectivity.pptx
- Количество слайдов: 21
Java Database Connectivity Простая работа с базами данных
Цель лекции • Понять принципы работы с базами данных из Java • Научиться создавать и манипулировать соединениями с базой данных • Делать выборочные запросы и обрабатывать результаты • Модифицировать данные • Обновлять структуру базы данных
Что такое JDBC? JDBC - платформенно-независимый промышленный стандарт взаимодействия Javaприложений с различными СУБД, реализованный в виде пакета java. sql Java Application JDBC Driver Database
JDBC Drivers My. SQL Microsoft SQL Server Postgre SQL Oracle SQLite My. SQL JDBC Driver MS SQL JDBC Driver Postgre. SQL JDBC Driver Oracle JDBC Driver SQLite JDBC Driver JDBC Iterface Java Application
Подключение драйвера • Class. for. Name("com. microsoft. sqlserver. jdbc. SQLServer. Driver"); • Class. for. Name("com. mysql. jdbc. Driver"); • Class. for. Name("oracle. jdbc. driver. Oracle. Driver"); • Class. for. Name("org. postgresql. Driver"); • Class. for. Name("org. sqlite. JDBC");
Соединение с базой данных public static Connection get. Connection(String url, String user, String password) throws SQLException String url = "jdbc: mysql: //facebook. com: 3306/"; String db. Name = "facebook"; String user. Name = "mark"; String password = "zuker 8 er 9"; //connect to database Connection conn = Driver. Manager. get. Connection(url + db. Name, user. Name, password); //disconnect from database conn. close();
Connection Pooling Оптимизаторы подключения к БД Реализации • Apache DBCP • C 3 P 0 • Bone. CP Connection Pool Connection DB Connection Java Application get. Connection() Connection
SQL Давайте вспомним основы SELECT first. Name, last. Name FROM User SELECT * FROM User WHERE first. Name = “John” UPDATE User SET first. Name = “John” INSERT INTO User (first. Name, last. Name) VALUES (“John”, “Doe”) • DELETE FROM User WHERE Id = 123 • •
Java SQL Class Diagram Statement nt me ate e. St at cre Driver. Manager Connection Driver provides prepare. Statement pre Result. Set par Prepared. Statement e. Ca l Result. Set. Meta. Data SQLException l Callable. Statement Database. Meta. Data SQLWarning Driver. Property. Info Data. Truncation
Statements Интерфейсы запросов к базе данных Statement • общий интерфейс для выполнения запросов и модификации данных • выполнение пакетных модификаций • предоставляет объект доступа к выборке Prepared. Statement Callable. Statement • может быть • интерфейс для использован несколько запуска хранимых раз с разными процедур и функций параметрами • доступ к • может выполняться специфичным быстрее, за счет параметрам предварительного возвращаемыми построения плана хранимыми выполнения (зависит от процедурами БД)
Statement Запросы к базе данных //создание Statement statement = connection. create. Statement(); //получение результата String sql = "SELECT * FROM User"; Result. Set result = statement. execute. Query(sql);
Result. Set Разбираем полученный результат List<User> users = new Array. List<>(); while(result. next()) { User user = new User(); //fill user with results user. set. First. Name(result. get. String("first. Name")); Integer gender = result. get. Int("gender"); user. set. Gender(gender == 0 ? "Female" : "Male"); user. set. Birth. Date(result. get. Date("birth. Date")); //add user to the list users. add(user); }
Advanced Statement Creation Все не так просто… Statement create. Statement(int result. Set. Type, int result. Set. Concurrency, int result. Set. Holdability) result. Set. Type result. Set. Concurrency result. Set. Holdability • • • TYPE_FORWARD_ONLY TYPE_SCROLL_INSENSITIVE TYPE_SCROLL_SENSITIVE • • CONCUR_READ_ONLY CONCUR_UPDATABLE • Определяет тип навигации по Result. Set • Определяет может ли • Result. Set модифицировать данные • • HOLD_CURSORS_OVER_COMMIT CLOSE_CURSORS_AT_COMMIT Определяет можно ли пользоваться Result. Set после коммита boolean Database. Meta. Data. supports. Result. Set. Type(int type) boolean Database. Meta. Data. supports. Result. Set. Concurrency(int type) boolean Database. Meta. Data. supports. Result. Set. Holdability(int type)
Навигация по Result. Set Навигация по результату Выборка данных boolean absolute(int row) void after. Last() void before. First() boolean first() boolean last() boolean next() boolean previous() boolean relative(int rows) int get. Row() int get. Type() boolean is. After. Last() boolean is. Before. First() boolean is. Last() String get. String(int column. Index) Input. Stream get. Ascii. Stream(int column. Index) Input. Stream get. Binary. Stream(int column. Index) Blob get. Blob(int column. Index) boolean get. Boolean(int column. Index) Date get. Date(int column. Index) double get. Double(int column. Index) int get. Int(int column. Index)
Модификация данных в Result. Set void move. To. Insert. Row() void update. Blob(String column. Label, Blob x) void update. Boolean(String column. Label, boolean x) void update. Date(String column. Label, Date x) void update. Double(String column. Label, double x) void update. Int(String column. Label, int x) void update. Null(String column. Label) void update. Row() void update. String(String column. Label, String x) void delete. Row() void insert. Row() boolean row. Deleted() boolean row. Inserted() boolean row. Updated() void refresh. Row() void cancel. Row. Updates()
Prepared. Statement «Заготовленные» запросы String sql = “UPDATE User SET first. Name=? WHERE id=? "; Prepared. Statement ps = connection. prepare. Statement(sql); ps. set. String(1, "John"); ps. set. Long(2, 1); ps. execute. Update(); ps. set. String(1, "Stephan"); ps. set. Long(2, 2); ps. execute. Update();
Callable. Statement Вызов хранимых процедур и функций Callable. Statement cs = connection. prepare. Call("{call user. Statistics(? , ? )}"); cs. set. String(1, "12/20/2012"); cs. set. Int(2, 1000); cs. register. Out. Parameter(1, java. sql. Types. VARCHAR); cs. register. Out. Parameter(2, java. sql. Types. INTEGER); Result. Set result = cs. execute. Query(); while(result. next()) {. . . } String out 1 = cs. get. String(1); int out 2 = cs. get. Int(2);
Модификация данных с помощью Statement statement = connection. create. Statement(); String sql = "UPDATE User SET first. Name = 'John' WHERE id = 1"; int rows. Affected = statement. execute. Update(sql); sql = "DELETE FROM User WHERE id = 1"; rows. Affected = statement. execute. Update(sql); //batch update statement. add. Batch("UPDATE User SET first. Name='John' WHERE id=1"); statement. add. Batch("UPDATE User SET first. Name='Mike' WHERE id=2"); int[] records. Affected = statement. execute. Batch();
Database. Meta. Data database. Meta. Data = connection. get. Meta. Data(); Programmability Tables Columns User user. Statistics (@date, @ids) SELECT * FROM User WHERE date = @date AND id IN (@ids) GROUP BY session. Id Account Role reconcile. Users() UPDATE User SET first. Name = email WHERE first. Name IS NULL AND email IS NOT NULL id first. Name last. Name genre Views Deleted. Users Inactive. Accounts <META-DATA>
ORM Libraries Высокоуровневые библиотеки для работы с БД • • Hibernate Java Persistence API Torque ORMLite
Домашнее задание Написать Command. Line приложение которое будет осуществлять доступ к базе данных. При запуске приложение должно предложить ввести параметры доступа к БД (хост, логин, пароль, имя базы данных). Приложение должно принимать команды в виде запросов к БД, уметь выводить результаты запросов к базе данных в виде отформатированной таблицы, а также показывать количество модифицированных результатов при запросах DELETE, INSERT, UPDATE. Приложение должно показывать причину проблемы выполнения запроса если возникла ошибка.
Season 2 - Java Database Connectivity.pptx