Содержание
- 2. JDBC – программный пакет для работы с БД Базы данных: учебный курс Схема работы с БД
- 3. JDBC – программный пакет для работы с БД Базы данных: учебный курс Пример программы import java.sql.*;
- 4. JDBC – программный пакет для работы с БД Базы данных: учебный курс Загрузка драйвера и установление
- 5. JDBC – программный пакет для работы с БД Базы данных: учебный курс Интерфейс Connection Создание «предложений»
- 6. JDBC – программный пакет для работы с БД Базы данных: учебный курс Создаем в базе данных
- 7. JDBC – программный пакет для работы с БД Базы данных: учебный курс Параметризованные SQL-предложения Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); try
- 8. JDBC – программный пакет для работы с БД Базы данных: учебный курс Получение данных с помощью
- 9. JDBC – программный пакет для работы с БД Базы данных: учебный курс Исследование полученных данных private
- 10. JDBC – программный пакет для работы с БД Базы данных: учебный курс Какую еще информацию можно
- 11. JDBC – программный пакет для работы с БД Базы данных: учебный курс Работа с курсором: изменение,
- 12. JDBC – программный пакет для работы с БД Базы данных: учебный курс Если курсор перемещаемый (TYPE_SCROLL_SENSITIVE),
- 13. JDBC – программный пакет для работы с БД Базы данных: учебный курс Если курсор «заменяемый» (TYPE_CONCUR_UPDATEABLE),
- 15. Скачать презентацию
Слайд 2JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Схема работы
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Схема работы
Загрузить класс(ы), реализующие необходимые драйверы
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Установить соединение с БД, используя загруженный драйвер
DriverManager.getConnection("jdbc:odbc:dsn");
Создать объект(ы) для исполнения SQL-команд
connection.createStatement();
Исполнять необходимые SQL-команды
stmt.executeUpdate("Delete From MyTable Where Id=1");
stmt.executeQuery("Select * From MyTable");
Обрабатывать полученные таблицы
result.getString("fieldName");
Закрыть открытые соединения
connection.close();
Слайд 3JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Пример программы
import
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Пример программы
import
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:dsn");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("Select * From positions");
while (rs.next()) {
String s = rs.getString("name");
System.out.println("Position name = " + s);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try { conn.close(); } catch (SQLException e) {}
}
Слайд 4JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Загрузка драйвера
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Загрузка драйвера
При загрузке класса драйвера он регистрируется в DriverManager.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
com.mysql.jdbc.Driver.class;
import com.microsoft.jdbc.sqlserver.*;
Driver driver = new SQLServerDriver();
Установить соединение с БД можно, используя менеджер
Connection conn =
DriverManager.getConnection("jdbc:odbc:dsn");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test","root","root");
Properties props = new Properties();
props.put("user", "admin");
props.put("password", "myPwd");
Connection conn = driver.connect(
"jdbc:microsoft:sqlserver://localhost:1433" , props);
Слайд 5JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Интерфейс Connection
Создание
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Интерфейс Connection
Создание
Работа с транзакциями connection.setAutoCommit(false); connection.commit(); connection.rollback();
Закрытие соединения connection.close();
Слайд 6JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Создаем в
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Создаем в
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
try {
Connection conn = DriverManager.getConnection(
"jdbc:odbc:projects");
Statement stmt = conn.createStatement();
String createTable = "CREATE TABLE roles (“ +
"Sortorder INTEGER, Name VARCHAR, PRIMARY KEY (Sortorder))“;
stmt.executeUpdate(createTable);
String insertData1 = "INSERT INTO roles (Sortorder, Name) " +
"VALUES(10, 'Project Leader')“;
String insertData2 = "INSERT INTO roles (Sortorder, Name) " +
"VALUES(20, 'Developer')";
stmt.executeUpdate(insertData1);
stmt.executeUpdate(insertData2);
conn.close();
} catch (SQLException x) {
x.printStackTrace();
}
Слайд 7JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Параметризованные SQL-предложения
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
try
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Параметризованные SQL-предложения
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
try
Connection conn = DriverManager.getConnection(
"jdbc:odbc:projects");
String insertData = "INSERT INTO roles (Sortorder, Name) " +
"VALUES(?, ?)";
PreparedStatement stmt = conn.prepareStatement(insertData);
stmt.setInt(1, 30);
stmt.setString (2, "QA Engineer");
stmt.executeUpdate();
conn.close();
} catch (SQLException x) {
x.printStackTrace();
}
Слайд 8JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Получение данных
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Получение данных
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
try {
Connection conn = DriverManager.getConnection(
"jdbc:odbc:projects");
String selectData = "SELECT Name, Salary FROM positions";
Statement stmt = conn.createStatement(selectData);
ResultSet rs = stmt.executeQuery();
System.out.println("Name\tSalary");
System.out.println("-----------------------");
while (rs.next()) {
String name = rs.getString("Name");
int salary = rs.getInt("Salary");
System.out.println(name + '\t'
}
conn.close();
} catch (SQLException x) {
x.printStackTrace();
}
Слайд 9JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Исследование полученных
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Исследование полученных
private static void printTable(Connection conn, String sql) {
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int colCount = rsmd.getColumnCount();
for (int i = 1; i <= colCount; ++i) {
System.out.print(rsmd.getColumnName(i) + '\t');
}
System.out.println(); System.out.println("--------------");
while(rs.next()) {
for (int i = 1; i <= colCount; ++i) {
System.out.print("" + rs.getObject(i) + '\t');
}
System.out.println();
}
} catch(SQLException x) {
System.out.println("Couldn't print table: " + x.getMessage());
}
}
Слайд 10JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Какую еще
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Какую еще
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
String fieldName = rsmd.getColumnName(i);
int type = rsmd.getColumnType(i);
// Types.VARCHAR, Types.INTEGER,...
String typeName = rsmd.getColumnTypeName(i);
// Как его возвращает драйвер БД, например "counter".
String className = rsmd.getColumnClassName(i);
// С точки зрения языка Java, например, "java.math.BigDecimal".
boolean curr = rsmd.isCurrency(i);
int nullable = rsmd.isNullable(i);
// columnNullable, columnNoNulls, columnNullableUnknown
Можно также получать метаданные о таблице, самой базе данных,…
DatabaseMetaData md = conn.getMetaData();
int maxRowSize = md.getMaxRowSize();
ResultSet metaRs = md.getTables(catalog, schema, tabName, types);
Слайд 11JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Работа с
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Работа с
// Увеличиваем все зарплаты на 10 процентов
private static void updateSalaries(Connection conn) {
try {
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE, // Можно перемещать
ResultSet.CONCUR_UPDATABLE); // Можно изменять данные
ResultSet rs = stmt.executeQuery("Select * From positions");
while (rs.next()) {
rs.updateInt("Salary", (int)(rs.getInt("Salary") * 1.1));
rs.updateRow();
}
} catch (SQLException x) {
x.printStackTrace();
}
}
// Конечно, того же эффекта можно было бы добиться,
// просто исполнив предложение
// UPDATE positions SET Salary = Salary * 1.1
Слайд 12JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Если курсор
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Если курсор
то с ним можно выполнять следующие действия:
ResultSet rs = ...;
rs.absolute(1);
rs.beforeFirst();
rs.afterLast();
rs.first();
rs.last();
rs.next()
rs.previous();
rs.relative(-5);
Если курсор перемещаемый только вперед (TYPE_FORWARD_ONLY),
то с ним можно выполнять только next()
Слайд 13JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Если курсор
JDBC – программный пакет для работы с БД
Базы данных: учебный курс
Если курсор
то можно заменять, добавлять и удалять данные:
// Замена
rs.updateInt(column, newData);
... // другие изменения в текущей записи
rs.updateRow();
// Добавление
rs.updateString(column, newData);
... // другие добавления в запись
rs.insertRow();
// Удаление
rs.deleteRow();
Если SELECT-предложение сложное, то может быть, данные невозможно
будет изменить, даже несмотря на то, что курсор UPDATEABLE.