Database Класс
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Экземпляр этого класса получается из DbContext объекта и может использоваться для управления фактической базой данных, поддерживаемой DbContext или подключением. В частности, поддерживается создание, удаление и проверка наличия базы данных. Обратите внимание, что удаление и проверка наличия базы данных могут выполняться только с помощью соединения (т. е. без полного контекста) с помощью статических методов этого класса.
public class Database
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable", Justification="The DbContextTransaction and EntityTransaction should never be disposed by this class")] public class Database
type Database = class
Public Class Database
Наследование
Свойства
Возвращает или задает значение времени ожидания (в секундах) для всех контекстных операций. Значение по умолчанию — null, где null указывает, что будет использоваться значение по умолчанию базового поставщика.
Возвращает соединение, используемое данным контекстом. Это может привести к созданию подключения, если оно еще не существует.
Возвращает транзакцию, в который включено базовое подключение к хранилищу. Может принимать значение NULL.
Является устаревшей.
Фабрика соединений, используемая DbConnection при создании из имени базы данных или строки подключения.
Присвойте этому свойству запись SQL, созданного классом , DbContext в заданном делегате. Например, чтобы войти в консоль, присвойте этому свойству значение Write(String).
Методы
Начинает транзакцию в базовом подключении к хранилищу
Начинает транзакцию в базовом подключении к хранилищу с использованием указанного уровня изоляции
Проверяет, совместима ли база данных с текущей моделью Code First.
Создает новую базу данных на сервере базы данных для модели, определенной в поддерживающем контексте. Учтите, что вызов этого метода до выполнения стратегии инициализации базы данных не позволит в дальнейшем выполнить эту стратегию.
Создает новую базу данных на сервере базы данных для модели, определенной в поддерживающем контексте, но только если на сервере пока не имеется базы данных с тем же именем.
Удаляет базу данных с сервера базы данных, если она существует. В противном случае не делает ничего. Вызов этого метода извне инициализатора помечает базу данных как не инициализированную. Это означает, что при попытке повторного использования базы данных после удаления любой набор инициализаторов будет снова запущен и, как правило, будет пытаться создать базу данных снова автоматически.
Удаляет базу данных с сервера базы данных, если она существует. В противном случае не делает ничего.
Удаляет базу данных с сервера базы данных, если она существует. В противном случае не делает ничего. Подключение к базе данных создается с использованием заданного имени базы данных или строки подключения так же, как описано в документации по классу DbContext .
Экземпляр этого класса получается из DbContext объекта и может использоваться для управления фактической базой данных, поддерживаемой DbContext или подключением. В частности, поддерживается создание, удаление и проверка наличия базы данных. Обратите внимание, что удаление и проверка наличия базы данных могут выполняться только с помощью соединения (т. е. без полного контекста) с помощью статических методов этого класса.
Выполняет указанную команду DDL/DML применительно к базе данных.
Как и в случае с любым API, который принимает SQL, важно параметризовать любые входные данные пользователя для защиты от атак путем внедрения кода SQL. Вы можете включить заполнители параметров в строку ЗАПРОСА SQL, а затем указать значения параметров в качестве дополнительных аргументов. Все указанные значения параметров будут автоматически преобразованы в DbParameter. Контексте. Database.ExecuteSqlCommand(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @p0», userSuppliedAuthor); Кроме того, можно создать DbParameter и передать его в SqlQuery. Это позволяет использовать именованные параметры в строке SQL-запроса. Контексте. Database.ExecuteSqlCommand(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @author», new SqlParameter(«@author», userSuppliedAuthor));
Выполняет указанную команду DDL/DML применительно к базе данных.
Как и в случае с любым API, который принимает SQL, важно параметризовать любые входные данные пользователя для защиты от атак путем внедрения кода SQL. Вы можете включить заполнители параметров в строку ЗАПРОСА SQL, а затем указать значения параметров в качестве дополнительных аргументов. Все указанные значения параметров будут автоматически преобразованы в DbParameter. Контексте. Database.ExecuteSqlCommand(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @p0», userSuppliedAuthor); Кроме того, можно создать DbParameter и передать его в SqlQuery. Это позволяет использовать именованные параметры в строке SQL-запроса. Контексте. Database.ExecuteSqlCommand(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @author», new SqlParameter(«@author», userSuppliedAuthor));
Асинхронно выполняет указанную команду DDL/DML для базы данных.
Как и в случае с любым API, который принимает SQL, важно параметризовать любые входные данные пользователя для защиты от атак путем внедрения кода SQL. Вы можете включить заполнители параметров в строку ЗАПРОСА SQL, а затем указать значения параметров в качестве дополнительных аргументов. Все указанные значения параметров будут автоматически преобразованы в DbParameter. Контексте. Database.ExecuteSqlCommandAsync(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @p0», userSuppliedAuthor); Кроме того, можно создать DbParameter и передать его в SqlQuery. Это позволяет использовать именованные параметры в строке SQL-запроса. Контексте. Database.ExecuteSqlCommandAsync(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @author», new SqlParameter(«@author», userSuppliedAuthor));
Асинхронно выполняет указанную команду DDL/DML для базы данных.
Как и в случае с любым API, который принимает SQL, важно параметризовать любые входные данные пользователя для защиты от атак путем внедрения кода SQL. Вы можете включить заполнители параметров в строку ЗАПРОСА SQL, а затем указать значения параметров в качестве дополнительных аргументов. Все указанные значения параметров будут автоматически преобразованы в DbParameter. Контексте. Database.ExecuteSqlCommandAsync(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @p0», userSuppliedAuthor); Кроме того, можно создать DbParameter и передать его в SqlQuery. Это позволяет использовать именованные параметры в строке SQL-запроса. Контексте. Database.ExecuteSqlCommandAsync(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @author», new SqlParameter(«@author», userSuppliedAuthor));
Асинхронно выполняет указанную команду DDL/DML для базы данных.
Как и в случае с любым API, который принимает SQL, важно параметризовать любые входные данные пользователя для защиты от атак путем внедрения кода SQL. Вы можете включить заполнители параметров в строку ЗАПРОСА SQL, а затем указать значения параметров в качестве дополнительных аргументов. Все указанные значения параметров будут автоматически преобразованы в DbParameter. Контексте. Database.ExecuteSqlCommandAsync(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @p0», userSuppliedAuthor); Кроме того, можно создать DbParameter и передать его в SqlQuery. Это позволяет использовать именованные параметры в строке SQL-запроса. Контексте. Database.ExecuteSqlCommandAsync(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @author», new SqlParameter(«@author», userSuppliedAuthor));
Асинхронно выполняет указанную команду DDL/DML для базы данных.
Как и в случае с любым API, который принимает SQL, важно параметризовать любые входные данные пользователя для защиты от атак путем внедрения кода SQL. Вы можете включить заполнители параметров в строку ЗАПРОСА SQL, а затем указать значения параметров в качестве дополнительных аргументов. Все указанные значения параметров будут автоматически преобразованы в DbParameter. Контексте. Database.ExecuteSqlCommandAsync(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @p0», userSuppliedAuthor); Кроме того, можно создать DbParameter и передать его в SqlQuery. Это позволяет использовать именованные параметры в строке SQL-запроса. Контексте. Database.ExecuteSqlCommandAsync(«UPDATE dbo. Записи SET Rating = 5 WHERE Author = @author», new SqlParameter(«@author», userSuppliedAuthor));
Проверяет, существует ли на сервере база данных.
Проверяет, существует ли на сервере база данных.
Проверяет, существует ли на сервере база данных. Подключение к базе данных создается с использованием заданного имени базы данных или строки подключения так же, как описано в документации по классу DbContext .
Экземпляр этого класса получается из DbContext объекта и может использоваться для управления фактической базой данных, поддерживаемой DbContext или подключением. В частности, поддерживается создание, удаление и проверка наличия базы данных. Обратите внимание, что удаление и проверка наличия базы данных могут выполняться только с помощью соединения (т. е. без полного контекста) с помощью статических методов этого класса.
Возвращает объект Type для текущего экземпляра.
Задает инициализатор базы данных, используемый для заданного типа контекста. Инициализатор базы данных вызывается, когда данный DbContext тип используется для первого доступа к базе данных. Стратегия по умолчанию для контекстов Code First — это экземпляр CreateDatabaseIfNotExists .
Создает необработанный SQL-запрос, возвращающий элементы заданного типа. Типом может быть любой тип, содержащий свойства, совпадающие с именами столбцов, возвращаемых запросом, либо простой тип-примитив. Тип не обязательно должен быть типом сущности. Результаты этого запроса никогда не отслеживаются контекстом, даже если возвращаемый объект имеет тип сущности. Используйте метод для SqlQuery(String, Object[]) возврата сущностей, отслеживаемых контекстом.
Создает необработанный SQL-запрос, возвращающий элементы заданного универсального типа. Типом может быть любой тип, содержащий свойства, совпадающие с именами столбцов, возвращаемых запросом, либо простой тип-примитив. Тип не обязательно должен быть типом сущности. Результаты этого запроса никогда не отслеживаются контекстом, даже если возвращаемый объект имеет тип сущности. Используйте метод для SqlQuery(String, Object[]) возврата сущностей, отслеживаемых контекстом.
Экземпляр этого класса получается из DbContext объекта и может использоваться для управления фактической базой данных, поддерживаемой DbContext или подключением. В частности, поддерживается создание, удаление и проверка наличия базы данных. Обратите внимание, что удаление и проверка наличия базы данных могут выполняться только с помощью соединения (т. е. без полного контекста) с помощью статических методов этого класса.
Позволяет пользователю передавать транзакцию базы данных, созданную за пределами Database объекта , если требуется, чтобы Entity Framework выполняла команды в этой внешней транзакции. Кроме того, передайте значение NULL, чтобы очистить знания платформы об этой транзакции.
Какой класс или интерфейс позволяет отсылать запросы в бд
//Шаг первый: Импорт пакетов
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Date;
import java.sql.SQLException;
public class FirstQuery
public static void main(String[] args)
Connection conn = null;
//Шаг второй: Регистрация JDBC драйвера
String driver = «oracle.jdbc.OracleDriver»;
Class.forName(driver);
// Шаг третий : Создание соединения
System.out.println(«Connecting to database . «);
String jdbcUrl = «jdbc:oracle:thin:@localhost:1521:orbis»;
String user = «stud»;
String pass = «stud»;
conn = DriverManager.getConnection(jdbcUrl, user, pass);
// Шаг четвертый : Выполнение запроса
Statement st = conn.createStatement();
String sql;
sql = «SELECT COUNT(*) FROM all_tables»;
ResultSet rs = st.executeQuery(sql);
//Шаг пятый: Извлечение данных из «Результата запроса»
while(rs.next()) <
//
int count = rs.getInt(1);
System.out.println(«Result set is: «+count);
>
// Шаг шестой : Освобождение ресурсов
rs.close();
st.close();
conn.close();
//Шаг седьмой: Обработка исключений
>catch(SQLException se) <
// Обработка ошибок для JDBC
se.printStackTrace();
>catch(Exception e) <
//Обработка ошибок для Class . forName
e.printStackTrace();
>finally <
//finally block used to close resourses
try <
if (conn!=null)
conn.close();
>catch(SQLException se) <
se.printStackTrace();
>//end finally try
>//end try
System.out.println(«GoodBye!»);
>//end main
>//end FirstQuery
Шаг 1: Импортирование классов и интерфейсов.
Как и во всех Java -приложениях необходимо импортировать пакеты, которые содержат необходимые для работы программы классы. Все JDBC интерфейсы и классы находятся в пакетах java . sql и javax . sql . Пакет java . sql содержит основные интерфейсы и классы, которые используются в любых JDBC -приложениях. Пакет javax . sql содержит классы и интерфейсы, необходимые для написания приложений корпоративного уровня. Он является стандартным расширением и применяется при создании и использовании «пула соединений», работы с «наборами строк», распределенными транзакциями и т.д.
- java . sql . DriverManager – Поддерживает совокупность драйверов-объектов и предоставляет их, при необходимости, для осуществления взаимодействия с СУБД.
- java . sql . Connection – Предоставляет физическое соединение с СУБД. Объекты данного класса управляют уровнями транзакций и типами результатов ( ResultSet ), возвращаемых выполняемыми запросами.
- java . sql . Statement – Пересылает SQL -предложение (запрос) в СУБД. Этот интерфейс позволяет отправлять только статические запросы без параметров. Для передачи в СУБД запроса с параметрами используются методы интерфейса java . sql . PreparedStatement .
- java . sql . ResultSet – Получает результат обработанного СУБД запроса и предусматривают методы для построчного извлечения данных результата запроса из объекта.
- java . sql . Date – Отображает тип данных JDBC на SQL DATE тип данных.
- java . sql . SQLException – Обрабатывает ошибки, возвращаемые СУБД, и исключения, возникающие в JDBC программах.
- DriverManager.registerDriver(Driver “объект класса драйвера” );
- Class.forName(String “ имя класса драйвера” ).
try <
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
> catch (SQLException se) <
se.printStackTrace();
>
Метод Class . forName () является более гибким методом регистрации драйвера, т.к. получает его имя в виде параметра типа String . Это позволяет задавать имя драйвера в командной стоке запуска Java -приложения на выполнение или в файле свойств, читаемым Java -приложением в момент исполнения программы. В приведенном выше примере переменной driver типа String присваивается полное имя класса JDBC драйвера. Данный метод выдает исключение ClassNotFoundException если указанный в качестве параметра драйвер не был найден в момент выполнения программы.
Использование Class.forName(String “имя класса драйвера”).newInstance() является наиболее распространенным способом регистрации драйвера. Созданный таким образом новый объект драйвера саморегистрируется с помощью статического инициализатора, который вызывает метод DriverManager.registerDriver(). Этот механизм позволяет динамически регистрировать драйвера в процессе выполнения программы. В случае регистрации ORACLE драйвера программный код может выглядеть следующим образом:
try <
String driver = “oracle.jdbc.OracleDriver”;
Class.forName(driver).newInstance();
> catch (ClassNotFoundException e) <
//Возникает, если класс драйвера не найден в CLASSPATH
e.print.StackTrace();
>
Для указания имени класса драйвера в качестве системного свойства в командной строке запуска программы на выполнение используется ключ -D. В этом случае JVM будет пытаться загрузить драйвер как часть процесса инициализации. По завершению инициализации будет запущено на выполнение само приложение. При этом регистрации драйвера в самом приложении уже не требуется. Ниже приведен пример командной строки:
java -Djdbc.drivers=oracle.jdbc.OracleDriver FirstQuery
В случае чтения имени класса драйвера из файла свойств, последний должен содержать строчку следующего вида:
Ниже приведен пример программного кода, читающего имя класса драйвера из файла свойств по имени database.properties:
Properties props = new Properties();
FileInputStream in = new FileInputStream(«database.properties»);
props.load(in);
in.close();
String drivers = props.getProperty(«jdbc.drivers»);
System.setProperty(«jdbc.drivers», drivers);
- DriverManager. getDriver();
- DriverManager.getDrivers() .
Enumeration drEnum = DriverManager.getDrivers();
while(drEnum.hasMoreElements()) <
Driver dr = (Driver)drEnum.nextElement();
String str = «Driver class name is: «+dr.getClass().getName();
System.out.println(str);
>
Если по какой либо причине возникла необходимость исключить возможность обращения к той или иной или базе данных, то можно воспользоваться методом DriverManager.deregisterDriver(), которому в качестве параметра указывается объект ранее зарегистрированного драйвера, например:
DriverManager.deregisterDriver(dr)
Шаг 3: Создание соединения с СУБД.
Для того чтобы открыть соединение с базой данных можно использовать один из трех перегруженных методов DriverManager . getConnection ():
DriverManager . getConnection (String url)
DriverManager . getConnection (String url, Properties prop)
DriverManager . getConnection (String url, String username, String password)
- url – указывает на местоположение базы данных и тип драйвера.
- username – имя пользователя, который будет использовать соединение.
- password – пароль пользователя.
- prop – объект типа Properties.
//Usage: java DBConnProp.
//Contents of file database.properties is:
//jdbc.drivers=oracle.jdbc.OracleDriver
//jdbc.url=jdbc:oracle:thin:@localhost:1521:orbis
//user=stud
//password=stud
//
import java.io.*;
import java.sql.*;
import java.util.*;
//
public class DBConnProp <
public static void main(String[] args) throws Exception
Connection db = getConnection();
Statement st = db.createStatement();
ResultSet rs = st.executeQuery(» SELECT COUNT(*) FROM all_tables «);
while (rs.next()) <
System.out.println(rs.getInt(1));
>
rs.close();
st.close();
db.close();
>
public static Connection getConnection() throws Exception <
Properties props = new Properties();
FileInputStream in = new FileInputStream(«ad.database.properties»);
props.load(in);
in.close();
props.list(System.out);
String drivers = props.getProperty(«jdbc.drivers»);
if (drivers != null) <
System.setProperty(«jdbc.drivers», drivers);
System.out.println(«Property \»jdbc.drivers\» 2″> System.getProperty(«jdbc.drivers»));
>
String url = props.getProperty(«jdbc.url»);
return DriverManager.getConnection(url, props);
>
>
Если попытка установки соединения окончится неудачей, то будет создан экземпляр исключения типа SQLException . В случае удачи, вновь созданный объект типа Connection будет представлять физическое соединение с базой данных.
Шаг. 4 : Выполнение SQL запроса.
Для выполнения запроса к базе данных необходимы два объекта. Первый объект необходим для применения интерфейсов Statement , PreparedStatement или CallableStatement . Эти три интерфейса имеют разное назначение. Интерфейс java . sql . Statement используется для выполнения статических запросов без параметров. Интерфейс java . sql . PreparedStatement используется для выполнения запросов с изменяемыми параметрами параметрами. И, наконец, java . sql . CallableStatement используется для выполнения хранимых в базе данных процедур.
Второй необходимый для выполнения запроса объект имеет тип ResultSet . Этот объект содержит результат выполнения запроса и предусматривает ряд итераторов, с помощью которых данные результата можно построчно извлекать из объекта.
В приведенном выше примере инициализируется объект типа Statement с помощью метода createStatement () объекта типа Connection . Далее переменной типа String присваивается SQL -предложение, которое используется в качестве параметра при выполнении метода executeQuery () объекта типа Statement . Данный метод возвращает объект типа ResultSet , содержащий результат выполнения запроса. В случае возникновения какой либо ошибки возникает исключение типа SQLException .
Шаг. 5: Просмотр результата запроса.
Данные результата запроса сохраняются в объекте типа ResultSet в виде таблицы из строк и столбцов. Количество строк определяется критерием выборки, указанном во фразе WHERE SQL -предложения. Порядок следования столбцов результата запроса соответствует порядку их перечисления в SQL -предложении. Тип данных столбцов результата запроса соответствует типу данных столбцов таблицы базы данных.
Для извлечения данных результата запроса из объекта типа ResultSet используются методы getXXX () этого объекта, где XXX соответствует извлекаемому типу данных (например: getInt (), getString (), getDate ()), а в скобках указывается в качестве параметра номер (начиная с 1) или символьное имя столбца. Объект типа ResultSet использует курсор, указывающий на текущую строку результата запроса. Перемещение курсора по строкам результата запроса осуществляется с помощью метода next () объекта типа ResultSet , содержащего этот результат. При этом существует два специальных положения курсора, указывающие на положение перед первой строкой результата запроса и на положение после последней строки результата запроса. Эти положения ничего не содержат и попытка получить из них данные приведет к возникновению исключения типа SQLException . В первоначальный момент сразу после заполнения объекта данными результата запроса курсор установлен в крайнем верхнем положении – перед первой строкой данных. По этому перед выполнением метода getXXX () необходимо переместить курсор на первую строку результата запроса. Обычно это делается с помощью уже упомянутого метода next (), который возвращает значение TRUE , если курсор после его выполнения указывает на строку с данными результата запроса, и FALSE , если курсор указывает на пустое положение после последней строки данных результата запроса. Это позволяет использовать метод в качестве условия при организации цикла перемещения курсора по строкам данных результата запроса.
Шаг. 6: Освобождение ресурсов.
Освобождение ресурсов осуществляется методом close () объекта, представляющего собой тот или иной ресурс, например: результат запроса, соединение с базой и т.д.
JDBC
JDBC — это платформенно независимый промышленный стандарт взаимодействия Java-приложений с реляционными базами данных. Впервые был включен в состав JDK 1.1 в 1997 году. JDBC управляет:
Освойте профессию «Java-разработчик»
- подключением к базе данных;
- выдачей запросов и команд;
- обработкой данных, полученных из базы.
Как работает JDBC
Пакет JDBC состоит из двух главных компонентов:
- API (программного интерфейса), который поддерживает связь между Java-приложением и менеджером JDBC;
- Драйвера JDBC, который поддерживает связь между менеджером JDBC и драйвером базы данных.
Профессия / 14 месяцев
Java-разработчик
Освойте востребованный язык

Соединение с базой устанавливается по особому URL. При этом разработчику не нужно знать специфику конкретной базы — API выступает в качестве посредника между базой и приложением. Это упрощает как процесс создания приложения, так и переход на базу данных другого типа.

Этапы подключения к базе данных
- Установка базы данных на сервер или выбор облачного сервиса, к которому нужно получить доступ.
- Подключение библиотеки JDBC.
- Проверка факта нахождения необходимого драйвера JDBC в classpath.
- Установление соединения с базой данных с помощью библиотеки JDBC.
- Использование установленного соединения для выполнения команд SQL.
- Закрытие соединения после окончания сеанса.
Рассмотрим каждый из этих шагов подробнее.

Установка SQLite
СУБД (система управления базами данных) SQLite отличается компактными размерами и простотой установки — для ее использования не нужна инсталляция дополнительных сервисов. Вся информация хранится в одном файле формата .db, который нужно поместить в папку с программой. Учебную базу можно скачать здесь.

Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке
Импорт JDBC в Java-приложение
Для использования JDBC, как и в случае со всеми остальными приложениями на платформе Java, в системе должен быть установлен JDK. Код для работы с JDBC можно писать как в среде разработки (IDE), так и в обычном текстовом редакторе. Простейшая программа может выглядеть так:
class WhatIsJdbcpublic static void main(String args[])System.out.println(«Hello World»);
>
>
Скомпилируйте этот код с помощью команды:
javac WhatIsJdbc.java
Теперь, когда программа готова, можно импортировать библиотеки JDBC. Для этого вставьте данный ниже код перед строками программы «Hello, World»:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
Каждый из импортированных модулей предоставляет доступ к классам, которые необходимы для взаимодействия Java-приложения с базой данных:
- Connection подготавливает подключение к базе.
- DriverManager обеспечивает подключение. Другая опция — модуль DataSource.
- SQLException обрабатывает SQL-ошибки, возникающие при взаимодействии приложении и базы данных.
- ResultSet и Statement моделируют наборы результатов данных и операторы SQL.
Добавление JDBC-драйвера в classpath
JDBC-драйвер — это класс, обеспечивающий взаимодействие интерфейса JDBC API с базой данных определенного типа. Драйвер для SQLite представляет собой .jar-файл — его нужно добавить в classpath, как показано ниже:
java.exe -classpath /path-to-driver/sqlite-jdbc-3.23.1.jar:. WhatIsJdbc
Установление соединения с базой данных
Теперь в classpath есть доступ к драйверу. Вставьте приведенный ниже код в файл с вашей первой программой:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
class WhatIsJdbcpublic static void main(String[] args) Connection conn = null;
try String url = «jdbc:sqlite:path-to-db/chinook/chinook.db»;
conn = DriverManager.getConnection(url);
System.out.println(«Соединение установлено»);
> catch (SQLException e) throw new Error(«Ошибка при подключении к базе данных», e);
> finally try if (conn != null) conn.close();
>
> catch (SQLException ex) System.out.println(ex.getMessage());
>
>
>
Теперь можно компилировать и запускать код. В случае успешного подключения появится сообщение «Соединение установлено».
Создание запроса к базе данных
В приведенном ниже примере показано, как создать запрос к базе SQLite, используя Connection и Statement:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
class WhatIsJdbcpublic static void main(String[] args) Connection conn = null;
try String url = «jdbc:sqlite:path-to-db-file/chinook/chinook.db»;
conn = DriverManager.getConnection(url);
Statement stmt = null;
String query = «select * from albums»;
try stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) String name = rs.getString(«title»);
System.out.println(name);
>
> catch (SQLException e ) throw new Error(«Problem», e);
> finally if (stmt != null) < stmt.close(); >
>
> catch (SQLException e) throw new Error(«Problem», e);
> finally try if (conn != null) conn.close();
>
> catch (SQLException ex) System.out.println(ex.getMessage());
>
>
>
Результатом выполнения этого кода будет вывод списка музыкальных альбомов из учебной базы в консоль.
Возможностей JDBC API достаточно для реализации простых приложений. Для более масштабных решений чаще используют JPA API, который позволяет сохранять Java-объекты в базе данных.
Java-разработчик
Java уже 20 лет в мировом топе языков программирования. На нем создают сложные финансовые сервисы, стриминги и маркетплейсы. Освойте технологии, которые нужны для backend-разработки, за 14 месяцев.

Статьи по теме:
Введение в ADO.NET
Сегодня большое значение имеет работа с данными. Для хранения данных используются различные системы управления базами данных: MS SQL Server, Oracle, MySQL и так далее. И большинство крупных приложений так или иначе используют для хранения данных эти системы управления базами данных. Однако чтобы осуществлять связь между базой данных и приложением на C# необходим посредник. И именно таким посредником является технология ADO.NET.
ADO.NET предоставляет собой технологию работы с данными, которая основана на платформе .NET Framework. Эта технология представляет нам набор классов, через которые мы можем отправлять запросы к базам данных, устанавливать подключения, получать ответ от базы данных и производить ряд других операций.
Причем важно отметить, что систем управления баз данных может быть множество. В своей сущности они могут различаться. MS SQL Server, например, для создания запросов использует язык T-SQL, а MySQL и Oracle применяют язык PL-SQL. Разные системы баз данных могут иметь разные типы данных. Также могут различаться какие-то другие моменты. Однако функционал ADO.NET построен таким образом, чтобы предоставить разработчикам унифицированный интерфейс для работы с самыми различными СУБД.
Основу интерфейса взаимодействия с базами данных в ADO.NET представляет ограниченный круг объектов: Connection, Command, DataReader, DataSet и DataAdapter. С помощью объекта Connection происходит установка подключения к источнику данных. Объект Command позволяет выполнять операции с данными из БД. Объект DataReader считывает полученные в результате запроса данные. Объект DataSet предназначен для хранения данных из БД и позволяет работать с ними независимо от БД. И объект DataAdapter является посредником между DataSet и источником данных. Главным образом, через эти объекты и будет идти работа с базой данных.
Однако чтобы использовать один и тот же набор объектов для разных источников данных, необходим соответствующий провайдер данных . Собственно через провайдер данных в ADO.NET и осуществляется взаимодействие с базой данных. Причем для каждого источника данных в ADO.NET может быть свой провайдер, который собственно и определяет конкретную реализацию вышеуказанных классов.
По умолчанию в ADO.NET имеются следующие встроенные провайдеры:
- Провайдер для MS SQL Server
- Провайдер для OLE DB (Предоставляет доступ к некоторым старым версиям MS SQL Server, а также к БД Access, DB2, MySQL и Oracle)
- Провайдер для ODBC (Провайдер для тех источников данных, для которых нет своих провайдеров)
- Провайдер для Oracle
- Провайдер EntityClient. Провайдер данных для технологии ORM Entity Framework
- Провайдер для сервера SQL Server Compact 4.0
Кроме этих провайдеров, которые являются встроенными, существует также множество других, предназначенных для различных баз данных, например, для MySQL.
Основные пространства имен, которые используются в ADO.NET:
- System.Data : определяет классы, интерфейсы, делегаты, которые реализуют архитектуру ADO.NET
- System.Data.Common : содержит классы, общие для всех провайдеров ADO.NET
- System.Data.Design : определяет классы, которые используются для создания своих собственных наборов данных
- System.Data.Odbc : определяет функциональность провайдера данных для ODBC
- System.Data.OleDb : определяет функциональность провайдера данных для OLE DB
- System.Data.Sql : хранит классы, которые поддерживают специфичную для SQL Server функциональность
- System.Data.OracleClient : определяет функциональность провайдера для баз данных Oracle
- System.Data.SqlClient : определяет функциональность провайдера для баз данных MS SQL Server
- System.Data.SqlServerCe : определяет функциональность провайдера для SQL Server Compact 4.0
- System.Data.SqlTypes : содержит классы для типов данных MS SQL Servera
- Microsoft.SqlServer.Server : хранит компоненты для взаимодействия SQL Server и среды CLR
Схематично архитектуру ADO.NET можно представить следующим образом:

Функционально классы ADO.NET можно разбить на два уровня: подключенный и отключенный. Каждый провайдер данных .NET реализует свои версии объектов Connection, Command, DataReader, DataAdapter и ряда других, который составляют подключенный уровень. То есть с помощью них устанавливается подключение к БД и выполняется с ней взаимодействие. Как правило, реализации этих объектов для каждого конкретного провайдера в своем названии имеют префикс, который указывает на провайдер:

Другие классы, такие как DataSet, DataTable, DataRow, DataColumn и ряд других составляют отключенный уровень, так как после извлечения данных в DataSet мы можем работать с этими данными независимо от того, установлено ли подключение или нет. То есть после получения данных из БД приложение может быть отключено от источника данных.
