JDBC – программный пакет для работы с БД

Содержание

Слайд 2

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Схема работы

JDBC – программный пакет для работы с БД Базы данных: учебный курс
с БД из программ на Java

Загрузить класс(ы), реализующие необходимые драйверы 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();

Слайд 3

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Пример программы

import

JDBC – программный пакет для работы с БД Базы данных: учебный курс
java.sql.*;
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) {}
}

Слайд 4

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Загрузка драйвера

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);

Слайд 5

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Интерфейс Connection

Создание

JDBC – программный пакет для работы с БД Базы данных: учебный курс
«предложений» для работы с БД Statement stmt = connection.createStatement(); PreparedStatement pst = connection.prepareStatement(sql); CallableStatement cst = connection.prepareCall(sql);
Работа с транзакциями connection.setAutoCommit(false); connection.commit(); connection.rollback();
Закрытие соединения connection.close();

Слайд 6

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Создаем в

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();
}

Слайд 7

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Параметризованные SQL-предложения

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
try

JDBC – программный пакет для работы с БД Базы данных: учебный курс
{
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();
}

Слайд 8

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Получение данных

JDBC – программный пакет для работы с БД Базы данных: учебный курс
с помощью SELECT-предложений

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();
}

Слайд 9

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Исследование полученных

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());
}
}

Слайд 10

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Какую еще

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);

Слайд 11

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Работа с

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

Слайд 12

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Если курсор

JDBC – программный пакет для работы с БД Базы данных: учебный курс
перемещаемый (TYPE_SCROLL_SENSITIVE),
то с ним можно выполнять следующие действия:

ResultSet rs = ...;
rs.absolute(1);
rs.beforeFirst();
rs.afterLast();
rs.first();
rs.last();
rs.next()
rs.previous();
rs.relative(-5);

Если курсор перемещаемый только вперед (TYPE_FORWARD_ONLY),
то с ним можно выполнять только next()

Слайд 13

JDBC – программный пакет для работы с БД

Базы данных: учебный курс

Если курсор

JDBC – программный пакет для работы с БД Базы данных: учебный курс
«заменяемый» (TYPE_CONCUR_UPDATEABLE),
то можно заменять, добавлять и удалять данные:

// Замена
rs.updateInt(column, newData);
... // другие изменения в текущей записи
rs.updateRow();
// Добавление
rs.updateString(column, newData);
... // другие добавления в запись
rs.insertRow();
// Удаление
rs.deleteRow();

Если SELECT-предложение сложное, то может быть, данные невозможно
будет изменить, даже несмотря на то, что курсор UPDATEABLE.

Имя файла: JDBC-–-программный-пакет-для-работы-с-БД.pptx
Количество просмотров: 91
Количество скачиваний: 0