Часть 1. Введение в SQL
Эта статья открывает небольшой цикл, посвященный азам взаимодействия с базами данных (БД) в Java и введению в SQL. Многие программы заняты обработкой и модификацией информации, её поддержкой в актуальном состоянии. Поскольку данные — весьма важная часть логики программ, то под них зачастую выделяют отдельное хранилище. Информация в нём структурирована и подчинена специальным правилам, чтобы обеспечить правильность обработки и хранения. Доступ к данным и их изменение осуществляется с помощью специального языка запросов — SQL (Structured Query Language).

Система управления базами данных — это ПО, которое обеспечивает взаимодействие разных внешних программ с данными и дополнительные службы (журналирование, восстановление, резервное копирование и тому подобное), в том числе посредством SQL. То есть программная прослойка между данными и внешними программами с ними работающими. В этой части ответим на вопросы что такое SQL, что такое SQL сервер и создадим первую программу для взаимодействия с СУБД.
Виды СУБД
- Иерархические. Данные организованы в виде древовидной структуры. Пример — файловая система, которая начинается с корня диска и далее прирастает ветвями файлов разных типов и папок разной степени вложенности.
- Сетевые. Видоизменение иерархической, у каждого узла может быть больше одного родителя.
- Объектно-ориентированные. Данные организованы в виде классов/объектов c их атрибутами и принципами взаимодействия согласно ООП.
- Реляционные. Данные этого вида СУБД организованы в таблицах. Таблицы могут быть связаны друг с другом, информация в них структурирована.
SQL
- Что такое SQL-Сервер и как он работает? Взаимодействие с СУБД происходит по клиент-серверному принципу. Некая внешняя программа посылает запрос в виде операторов и команд на языке SQL, СУБД его обрабатывает и высылает ответ. Для упрощения примем, что SQL Сервер = СУБД.
- Data Definition Language (DDL) – определения данных. Создание структуры БД и её объектов;
- Data Manipulation Language(DML) – собственно взаимодействие с данными: вставка, удаление, изменение и чтение;
- Transaction Control Language (TCL) – управление транзакциями;
- Data Control Language(DCL) – управление правами доступа к данным и структурам БД.
JDBC

В 80-е годы прошлого века персональные компьютеры типа PC XT/AT завоевали рынок. Во многом это произошло благодаря модульности их конструкции. Это означает, что пользователь мог довольно просто менять ту или иную составную часть своего компьютера (процессор, видеокарту, диски и тому подобное). Это замечательное свойство сохранилось и поныне: мы меняем видеокарту и обновляем драйвер (иногда он и вовсе обновляется сам, в автоматическом режиме). Чаще всего при таких манипуляциях ничего плохого не происходит, и существующие программы продолжат работать с обновившейся системой без переустановки. Аналогично и для работы в Java с СУБД. Для стандартизации работы с SQL-серверами взаимодействие с ней можно выполнять через единую точку — JDBC (Java DataBase Connectivity). Она представляет собой реализацию пакета java.sql для работы с СУБД. Производители всех популярных SQL-серверов выпускают для них драйверы JDBC. Рассмотрим схему ниже. Приложение использует экземпляры классов из java.sql. Затем мы передаем необходимые команды для получения/модификации данных. Далее java.sql через jdbc-драйвер взаимодействует с СУБД и возвращает нам готовый результат. Для перехода на СУБД другого производителя часто достаточно сменить JDBC и выполнить базовые настройки. Остальные части программы при этом не меняются.
Первая программа
Приступим к практической части. Создадим Java-проект с помощью IDE JetBrains IntelliJ IDEA. Заметим, что редакция Ultimate Edition содержит в своём составе замечательный инструмент для работы с SQL и БД — Data Grip. Однако она платная для большинства пользователей. Так что нам для учебных целей остается использовать общедоступную IntelliJ IDEA Community Edition. Итак:
- Запускаем IDE и создадём новый проект:

- Выбираем Java-проект, указываем версию SDK (в примере JDK8, однако это не критично):

- На следующем шаге выбираем в качестве типа консольное приложение:

- Указываем имя проекта, пакет и его размещение на диске (я создал специально для этого отдельную директорию):

- Отложим на минуту IDE и загрузим c www.h2database.com необходимый JDBC-файл для работы c СУБД H2 (download platform independent ZIP):

- Заходим внутрь скачанного файла (нас интересует jar-файл по пути h2\bin, который нам далее понадобится, скопируем его):

- Возвращаемся в IDE и создаём в корне проекта директории: db, где будут размещены файлы с данными СУБД; lib – здесь JAR-библиотека JDBC:

- Переносим в директорию lib jar-файл из шага 6, и добавим его в проект как библиотеку:

- Переименуем java-файл в src/sql/demo на StockExchange.java (если забыли, мы собираемся эмулировать простую «биржу»), поменяем его содержимое и запустим:

Теперь мы умеем подключаться к СУБД и отключаться от неё. Каждый шаг отражается в консоли. При первом подключении к СУБД создаётся файл базы данных stockExchange.mv.db.
Разбор кода
Собственно код:
package sql.demo; import java.sql.*; public class StockExchangeDB < // Блок объявления констант public static final String DB_URL = "jdbc:h2:/c:/JavaPrj/SQLDemo/db/stockExchange"; public static final String DB_Driver = "org.h2.Driver"; public static void main(String[] args) < try < Class.forName(DB_Driver); //Проверяем наличие JDBC драйвера для работы с БД Connection connection = DriverManager.getConnection(DB_URL);//соединениесБД System.out.println("Соединение с СУБД выполнено."); connection.close(); // отключение от БД System.out.println("Отключение от СУБД выполнено."); >catch (ClassNotFoundException e) < e.printStackTrace(); // обработка ошибки Class.forName System.out.println("JDBC драйвер для СУБД не найден!"); >catch (SQLException e) < e.printStackTrace(); // обработка ошибок DriverManager.getConnection System.out.println("Ошибка SQL !"); >> >
Блок констант:
- DB_Driver: Здесь мы определили имя драйвера, которое можно узнать, например, кликнув мышкой на подключенную библиотеку и развернув её структуру в директории lib текущего проекта.
- DB_URL: Адрес нашей базы данных. Состоит из данных, разделённых двоеточием:
- Протокол=jdbc
- Вендор (производитель/наименование) СУБД=h2
- Расположение СУБД, в нашем случае путь до файла (c:/JavaPrj/SQLDemo/db/stockExchange). Для сетевых СУБД тут дополнительно указываются имена или IP адреса удалённых серверов, TCP/UDP номера портов и так далее.
Обработка ошибок:
Вызов методов нашего кода может вернуть ошибки, на которые следует обратить внимание. На данном этапе мы просто информируем о них в консоли. Заметим, что ошибки при работе с СУБД — это чаще всего SQLException.
Логика работы:
- Class.forName(DB_Driver) – убеждаемся в наличии соответствующего JDBC-драйвера (который мы ранее загрузили и установили).
- DriverManager.getConnection(DB_URL) – устанавливаем соединение СУБД. По переданному адресу, JDBC сама определит тип и местоположение нашей СУБД и вернёт Connection, который мы можем использовать для связи с БД.
- connection.close() – закрываем соединение с СУБД и завершаем работу с программой.
Создать подключение базы данных (Управление данными)
Создает файл, который ArcGIS использует для подключения к базе данных или к многопользовательской базе геоданных.
Использование
- После ввода корректной информации о подключении для установки подключения в диалоговом окне инструмента, инструмент обратится к базе данных, чтобы определить, содержит ли база данных схему.
- Для баз данных все параметры в категории Свойства подключения к базе геоданных в панели Геообработка игнорируются.
- Для баз геоданных инструмент автоматически заполняет категорию параметров Свойства подключения к базе геоданных . Параметр Схема устанавливается со схемой sde (только для пользовательской схемы базы геоданных Oracle ), Тип версии по умолчанию для базы данных и версия По умолчанию.
Параметры
Местоположение файла подключения
Путь к папке, где будет храниться файл подключения к базе данных ( .sde ).
Имя файла подключения
Имя файла подключения к базе данных. Выходной файл будет иметь расширение .sde .
Платформа базы данных
Определяет платформу системы управления базы данных, к которой будет выполнено подключение. Существует несколько возможных опций:
- BigQuery — Будет выполнено подключение к Google BigQuery .
Экземпляр/Сервер
(Дополнительный)Сервер базы данных или экземпляр, к которому вы подключаетесь.
Значение, выбранное из ниспадающего меню Платформа базы данных , определяет тип базы данных или облачного хранилища данных, к которой вы будете подключиться. Указываемая информация для параметра Экземпляр/Сервер может варьироваться в зависимости от выбранного типа подключения.
Ниже смотрите информацию о том, что необходимо предоставить для каждой платформы.
- Dameng – имя сервера, на котором установлена база данных Dameng
- Db2 – имя каталогизированной базы данных Db2
- Oracle – имя TNS или строка Oracle Easy Connection для подключения к базе данных или сервису базы данных Oracle
- PostgreSQL – имя сервера, на котором установлен PostgreSQL , или имя экземпляра сервиса базы данных PostgreSQL
- Redshift — URL-адрес для сервера Redshift
- SAP HANA – имя источника данных ODBC для базы данных или сервиса базы данных SAP HANA
- Snowflake — URL-адрес сервера Snowflake
- SQL Server – имя экземпляра базы данных SQL Server или имя экземпляра сервиса базы данных.
- Teradata – имя источника данных ODBC для базы данных Teradata
Аутентификация в базе данных.
(Дополнительный)Указывает тип используемой аутентификации.
- Аутентификация в базе данных — Будет использоваться аутентификация в базе данных. Для подключения к базе данных будет использоваться внутреннее имя пользователя базы данных и пароль. Вводить имя пользователя или пароль для создания подключения необязательно; но если этого не сделать, вам будет предложено ввести их при установлении подключения.
Примечание:
Если создаваемый файл подключения обеспечивает сервисам ArcGIS доступ к базе данных или базе геоданных, или, если вы хотите использовать Каталог для поиска данных, доступных через этот файл подключения, необходимо включить имя пользователя и пароль.
Имя пользователя
(Дополнительный)Имя пользователя базы данных, которые будет использоваться для аутентификации в базе данных.
(Дополнительный)
Пароль пользователя базы данных , который будет использоваться для аутентификации базы данных.
Сохранить имя пользователя и пароль
(Дополнительный)Указывает, будут ли сохранены имя пользователя и пароль.
- Отмечено – имя пользователя и пароль будут сохранены в файле подключения. Это значение по умолчанию Если создаваемый файл подключения обеспечивает сервисам ArcGIS с доступом к базе данных, базе геоданных или облачному хранилищу данных, если вы хотите использовать Каталог для поиска данных, доступных через этот файл подключения, необходимо сохранить имя пользователя и пароль.
- Не отмечено – имя пользователя и пароль не будут сохранены в файле подключения. При каждой попытке подключиться с помощью файла будет отображаться запрос на ввод имени пользователя и пароля.
База данных
(Дополнительный)Имя базы данных, к которой будет выполнено подключение. Этот параметр применяется только для платформ PostgreSQL , Redshift , Snowflake и SQL Server .
Схема (только базы геоданных пользовательской схемы Oracle)
(Дополнительный)База геоданных пользовательской схемы, к которой будет выполнено подключение. Инструмент определит наличие подключения к базе данных Oracle , которая содержит базу геоданных пользовательской схемы. Если база данных Oracle содержит пользовательскую схему, эта опция активна, а в противном случае — не активна. По умолчанию этот параметр использует sde- схему базы геоданных.
Тип версии
(Дополнительный)Определяет тип версии, к которой будет выполнено подключение. Этот параметр применяется столько при подключении к базе геоданных.
Примечание:
Если выбрано значение Историческая , и в параметре имени версии не указано имя, будет использована рабочая версия по умолчанию. Если выбрано значение Точка во времени , и в параметре Дата и время не указана дата, будет использована рабочая версия по умолчанию Default.
- Рабочая — Подключение будет выполнено к рабочей версии. Если выбрано значение Рабочая , параметр Будет использоваться следующая версия будет заполнен списком рабочих версий. Параметр времени и даты будет неактивным. Это значение по умолчанию
Будет использоваться следующая версия
(Дополнительный)Рабочая версия базы геоданных или исторический маркер, к которому будет выполняться подключение. Опция по умолчанию использует рабочую версию по умолчанию.
Если вы выбрали тип версии Ветвь, вы всегда подключаетесь к версии ветви по умолчанию.
Дата и время
(Дополнительный)Значение, представляющее собой дату и время, используемое для подключения к базе данных. Эта опция используется с данными, для которых включено архивирование. Используйте средство выбора времени для выбора нужного значения времени.
- 6/9/2011 4:20:15 PM
- 6/9/2011 16:20:15
- 6/9/2011
- 4:20:15 PM
- 16:20:15
Примечание:
- Если время указывается без даты, будет использована дата по умолчанию (30 декабря 1899 г.).
- Если дата указывается без указания времени, будет использовано время по умолчанию (12:00).
Расширенный тип аутентификации
(Дополнительный)Указывает на использование расширенного типа аутентификации, который будет использован при подключении к облачному хранилищу данных, Microsoft Azure SQL Database или Azure SQL Managed Instance .
- Azure Active Directory Universal с MFA — Будет использована аутентификация по имени пользователя Azure Active Directory , но не по паролю. При подключении вам приходит текстовое сообщение, email или на устройство MFA с кодом, либо вы можете использовать для аутентификации скан отпечатка пальца. Эта вторая часть процесса аутентификации зависит от ваших настроенных сетевых и авторизационных протоколов.Опция поддерживается только для Azure SQL Database и Azure SQL Managed Instance .
Идентификатор (ID) проекта
(Дополнительный)ID проекта для подключения к Google BigQuery .
Набор данных по умолчанию
(Дополнительный)Набор данных по умолчанию для подключения к Google BigQuery .
Обновить токен
(Дополнительный)Значение для обновления тоекна.
Этот параметр применяется только для подключения к Google BigQuery , если тип расширенной аутентификации — аутентификация пользователя.
Ключевой файл
(Дополнительный)Значение для ключевого файла.
Этот параметр применяется только для подключения к Google BigQuery , если тип расширенной аутентификации — аутентификация на сервере.
(Дополнительный)
Значение роли для подключения к облачному хранилищу данных.
Этот параметр применяется, только при подключении к Snowflake .
(Дополнительный)
Значение хранилища для подключения.
Этот параметр применяется, только при подключении к Snowflake .
Дополнительные опции
(Дополнительный)Дополнительные опции для подключения. Дополнительная информация о подключении, специфичная для платформы облачного хранилища данных ( Google BigQuery , Amazon Redshift или Snowflake ) к которому вы подключаетесь. Указжите дополнительные опции, используя формат Option=, разделенные точками с запятой. Например, option1=value1;option2=value2; . См. документацию по облачному хранилищу данных для информации о дополнительных опциях.
Производные выходные данные
Выходной файл подключения базы данных ( .sde ).
arcpy.management.CreateDatabaseConnection(out_folder_path, out_name, database_platform, , , , , , , , , , , , , , , , , , )
out_folder_path
Путь к папке, где будет храниться файл подключения к базе данных ( .sde ).
Имя файла подключения к базе данных. Выходной файл будет иметь расширение .sde .
database_platform
Определяет платформу системы управления базы данных, к которой будет выполнено подключение. Существует несколько возможных опций:
- BIGQUERY — Будет выполнено подключение к Google BigQuery .
(Дополнительный)
Сервер базы данных или экземпляр, к которому вы подключаетесь.
Значение, указанное для параметра database_platform , определяет тип базы данных или облачного хранилища данных, к которой выполняется подключение. Информация, указываемая в параметре instance может варьироваться в зависимости от указанной платформы.
Ниже смотрите информацию о том, что необходимо предоставить для каждой платформы.
- Dameng – имя сервера, на котором установлена база данных Dameng
- Db2 – имя каталогизированной базы данных Db2
- Oracle – имя TNS или строка Oracle Easy Connection для подключения к базе данных или сервису базы данных Oracle
- PostgreSQL – имя сервера, на котором установлен PostgreSQL , или имя экземпляра сервиса базы данных PostgreSQL
- Redshift — URL-адрес для сервера Redshift
- SAP HANA – имя источника данных ODBC для базы данных или сервиса базы данных SAP HANA
- Snowflake — URL-адрес сервера Snowflake
- SQL Server – имя экземпляра базы данных SQL Server или имя экземпляра сервиса базы данных.
- Teradata – имя источника данных ODBC для базы данных Teradata
account_authentication
(Дополнительный)Указывает тип используемой аутентификации.
- DATABASE_AUTH — Будет использоваться аутентификация в базе данных. Для подключения к базе данных будет использоваться внутреннее имя пользователя базы данных и пароль. Вводить имя пользователя или пароль для создания подключения необязательно; но если этого не сделать, вам будет предложено ввести их при установлении подключения.
Примечание:
Если создаваемый файл подключения обеспечивает сервисам ArcGIS доступ к базе данных или базе геоданных, или, если вы хотите использовать Каталог для поиска данных, доступных через этот файл подключения, необходимо включить имя пользователя и пароль.
(Дополнительный)
Имя пользователя базы данных, которые будет использоваться для аутентификации в базе данных.
(Дополнительный)
Пароль пользователя базы данных , который будет использоваться для аутентификации базы данных.
save_user_pass
(Дополнительный)Указывает, будут ли сохранены имя пользователя и пароль.
- SAVE_USERNAME — Имя пользователя и пароль будут сохранены в файле подключения. Это значение по умолчанию Если создаваемый файл подключения обеспечивает сервисам ArcGIS с доступом к базе данных, базе геоданных или облачному хранилищу данных, если вы хотите использовать Каталог для поиска данных, доступных через этот файл подключения, необходимо сохранить имя пользователя и пароль.
(Дополнительный)
Имя базы данных, к которой будет выполнено подключение. Этот параметр применяется только для платформ PostgreSQL , Redshift , Snowflake и SQL Server .
(Дополнительный)
База геоданных пользовательской схемы, к которой будет выполнено подключение. Эта опция применяется только для баз данных Oracle , которые содержат хотя бы одну базу геоданных пользовательской схемы. По умолчанию этот параметр использует sde-схему базы геоданных.
version_type
(Дополнительный)Определяет тип версии, к которой будет выполнено подключение.
- TRANSACTIONAL — Подключение будет выполнено к традиционной рабочей версии.
Примечание:
Эта опция не поддерживается для баз геоданных в SAP HANA .
Примечание:
Если используется TRANSACTIONAL или HISTORICAL , параметр date будет игнорироваться. Если используется HISTORICAL , и в параметре version не указано имя, будет использована рабочая версия по умолчанию. Если выбрано значение POINT_IN_TIME , и в параметре date не указана дата, будет использована рабочая версия по умолчанию.
(Дополнительный)
Рабочая версия базы геоданных или исторический маркер, к которому будет выполняться подключение. Опция по умолчанию использует рабочую версию по умолчанию.
Если вы выбрали тип версии Ветвь, вы всегда подключаетесь к версии ветви по умолчанию.
(Дополнительный)
Значение, соответствующее дате и времени, которое будет использоваться для подключении к базе данных при работе с данными со включенным архивированием.
- 6/9/2011 4:20:15 PM
- 6/9/2011 16:20:15
- 6/9/2011
- 4:20:15 PM
- 16:20:15
Примечание:
- Если время указывается без даты, будет использована дата по умолчанию (30 декабря 1899 г.).
- Если дата указывается без указания времени, будет использовано время по умолчанию (12:00).
(Дополнительный)
Указывает на использование расширенного типа аутентификации, который будет использован при подключении к облачному хранилищу данных, Microsoft Azure SQL Database или Azure SQL Managed Instance .
- AZURE_ACTIVE_DIRECTORY_UNIVERSAL_WITH_MFA — Будет использована аутентификация по имени пользователя Azure Active Directory , но не по паролю. При подключении вам приходит текстовое сообщение, email или на устройство MFA с кодом, либо вы можете использовать для аутентификации скан отпечатка пальца. Эта вторая часть процесса аутентификации зависит от ваших настроенных сетевых и авторизационных протоколов.Опция поддерживается только для Azure SQL Database и Azure SQL Managed Instance .
project_id
(Дополнительный)ID проекта для подключения к Google BigQuery .
default_dataset
(Дополнительный)Набор данных по умолчанию для подключения к Google BigQuery .
refresh_token
(Дополнительный)Значение для обновления тоекна.
Этот параметр применяется только для подключения к Google BigQuery , если тип расширенной аутентификации — аутентификация пользователя.
(Дополнительный)
Значение для ключевого файла.
Этот параметр применяется только для подключения к Google BigQuery , если тип расширенной аутентификации — аутентификация на сервере.
(Дополнительный)
Значение роли для подключения к облачному хранилищу данных.
Этот параметр применяется, только при подключении к Snowflake .
(Дополнительный)
Значение хранилища для подключения.
Этот параметр применяется, только при подключении к Snowflake .
advanced_options
(Дополнительный)Дополнительные опции для подключения. Дополнительная информация о подключении, специфичная для платформы облачного хранилища данных ( Google BigQuery , Amazon Redshift или Snowflake ) к которому вы подключаетесь. Указжите дополнительные опции, используя формат Option=, разделенные точками с запятой. Например, option1=value1;option2=value2; . См. документацию по облачному хранилищу данных для информации о дополнительных опциях.
Производные выходные данные
Выходной файл подключения базы данных ( .sde ).
Пример кода
CreateDatabaseConnection, пример 1 (окно Python)
Пример скрипта окна Python для использования функции CreateDatabaseConnection в режиме прямого запуска.
import arcpy arcpy.CreateDatabaseConnection_management("C:\\MyProject", "utah.sde", "SQL_SERVER", "utah", "DATABASE_AUTH", "gdb", "gdb", "SAVE_USERNAME", "garfield", "#", "TRANSACTIONAL", "sde.DEFAULT")CreateDatabaseConnection, пример 2 (автономный скрипт)
В следующем автономном скрипте показано использование функции CreateDatabaseConnection .
# Name: CreateDatabaseConnection2.py # Description: Connects to a database using Easy Connect string # and operating system authentication. # Import system modules import arcpy # Run the tool arcpy.CreateDatabaseConnection_management("C:\\MyProject", "zion.sde", "ORACLE", "zionserver/ORCL", "OPERATING_SYSTEM_AUTH")CreateDatabaseConnection, пример 3 (окно Python)
Приведенный ниже скрипт окна Python демонстрирует, как использовать функцию CreateDatabaseConnection для подключения к историческому маркеру.
# Name: CreateDatabaseConnection3.py # Description: Connects to a geodatabase historical marker using a # cataloged DB2 database and database authentication. # Import system modules import arcpy # Run the tool arcpy.CreateDatabaseConnection_management("C:\\MyProject", "history.sde", "DB2", "DB2_DS", "DATABASE_AUTH", "butch", "sundance", "SAVE_USERNAME", "#", "#", "HISTORICAL", "June 9, 2010", "#")CreateDatabaseConnection, пример 4 (окно Python)
Приведенный ниже скрипт окна Python демонстрирует, как использовать функцию CreateDatabaseConnection , для подключения к точки во времени.
# Name: CreateDatabaseConnection4.py # Description: Connects to a point in time in the geodatabase in # PostgreSQL using database authentication. # Import system modules import arcpy # Run the tool arcpy.CreateDatabaseConnection_management("C:\\MyProject", "history.sde", "POSTGRESQL", "dbserver", "DATABASE_AUTH", "stevie", "smith", "SAVE_USERNAME", "archivedb", "#", "POINT_IN_TIME", "#", "5/19/2011 8:43:41 AM")Как соединить бд sql с с
• Как одиночную базу данных со своим собственным набором ресурсов, управляемую через логический сервер.
Одиночную базу данных можно развернуть на логическом сервере. Логический сервер, содержащий одиночные и объединенные базы данных, предлагает большинство функций SQL Server для масштабируемой базы данных. Эта опция оптимизирована для современной разработки новых приложений по облачной технологии.
• В виде компонента набора баз данных, известного как управляемый экземпляр , который содержит систему и базы данных пользователей и совместно использует ряд ресурсов.
Можно выполнить развертывание управляемых экземпляров базы данных Azure SQL. При наличии управляемого экземпляра база данных Azure SQL предлагает совместное использование ресурсов для баз данных и дополнительные функции масштабирования экземпляра. Управляемый экземпляр базы данных Azure SQL поддерживает перенос базы данных из локальной среды с минимальными или нулевыми изменениями в базе данных. Эта опция предоставляет все преимущества PaaS базы данных Azure SQL, но добавляет возможности, которые ранее были доступны только в виртуальных машинах SQL VM. К ним относятся собственная виртуальная сеть (VNet) и почти 100%-я совместимость с локальным SQL Server.
• Как объединенную базу данных в эластичном пуле с общим набором ресурсов и управлением через логический сервер.
Модель приобретения Azure SQL
В зависимости от модели развертывания базы данных Azure SQL можно выбрать модель приобретения, соответствующую потребностям:
1. (Рекомендуется) Модель приобретения на базе vCore, позволяющая выбрать точные величины емкости хранилища и вычислительных ресурсов, нужных для рабочей нагрузки.
2. Модель приобретения на базе DTU, в которой можно выбрать связанные пакеты ресурсов вычисления и хранения, сбалансированные для типовых рабочих нагрузок.
Какую модель приобретения я должен использовать для своего производственного сервера?
Опции настройки базы данных Azure SQLВ Azure SQL определенные ресурсы, такие как группа ресурсов, логический сервер SQL Server и т. д., должны быть настроены прежде, чем можно будет создать базу данных и схему ThingWorx. Эти ресурсы могут быть созданными ранее или вновь созданными. Следующие шаги объясняют, как создать (или использовать существующие) ресурсы с помощью портала Azure Microsoft и как создать базу данных и схему ThingWorx с помощью предоставленных ThingWorx скриптов и Microsoft Azure CLI. Существует три типа вариантов развертывания базы данных SQL Azure:
Необходимые условия настройки базы данных
• Для среды Windows требуется Powershell. Запустите Powershell от имени администратора и выполните следующее.
Это однократный процесс после загрузки сборки:
Set-ExecutionPolicy RemoteSigned
Unblock-File *.ps1 (after navigating to the install directory)В следующих разделах описано, как установить каждое развертывание в Azure и как соединить его с ThingWorx.
База данных · Начало работы
Почти каждое современное веб-приложение взаимодействует с базой данных. Laravel делает взаимодействие с базами данных чрезвычайно простым через поддержку множества баз данных, используя либо сырой SQL построителя запросов, либо Eloquent ORM. В настоящее время Laravel обеспечивает поддержку пяти баз данных:
- MariaDB 10.2+ (Version Policy)
- MySQL 5.7+ (Version Policy)
- PostgreSQL 9.6+ (Version Policy)
- SQLite 3.8.8+
- SQL Server 2017+ (Version Policy)
Конфигурирование
Конфигурация служб баз данных Laravel находится в конфигурационном файле config/database.php вашего приложения. В этом файле вы можете определить все соединения к базе данных, а также указать, какое соединение должно использоваться по умолчанию. Большинство параметров конфигурации в этом файле определяется значениями переменных окружения вашего приложения. В этом файле представлены примеры для большинства систем баз данных, поддерживаемых Laravel.
По умолчанию пример конфигурации окружения Laravel готов к использованию с Laravel Sail, который представляет собой конфигурацию Docker для разработки приложений Laravel на вашем локальном компьютере. Однако вы можете изменить конфигурацию своей базы данных по мере необходимости для своей локальной базы данных.
Конфигурация SQLite
Базы данных SQLite содержатся в одном файле вашей файловой системы. Вы можете создать новую базу данных SQLite, используя команду touch в консоли: touch database/database.sqlite . После создания базы данных вы можете легко настроить переменные окружения так, чтобы они указывали на эту базу данных, указав абсолютный путь к базе данных в переменной DB_DATABASE окружения:
DB_CONNECTION=sqlite DB_DATABASE=/absolute/path/to/database.sqliteЧтобы включить ограничения внешнего ключа для соединений SQLite, установите переменную DB_FOREIGN_KEYS окружения в true :
DB_FOREIGN_KEYS=trueКонфигурация Microsoft SQL Server
Чтобы использовать базу данных Microsoft SQL Server, вы должны убедиться, что у вас установлены расширения PHP sqlsrv и pdo_sqlsrv , а также любые зависимости, которые могут им потребоваться, например, драйвер Microsoft SQL ODBC.
Конфигурация с использованием URL
Обычно соединения с базой данных конфигурируются с использованием нескольких значений, таких как host , database , username , password и т.д. Каждое из этих значений имеет свою собственную соответствующую переменную окружения. Это означает, что при указании информации о соединении с базой данных на рабочем веб-сервере вам необходимо управлять несколькими переменными окружения.
Некоторые поставщики СУБД, такие, как AWS и Heroku, предоставляют единый «URL» базы данных, который содержит всю информацию о соединении в одной строке. Пример URL-адреса базы данных может выглядеть так:
mysql://root:password@127.0.0.1/forge?charset=UTF-8Эти URL обычно следуют соглашению стандартной схемы:
driver://username:password@host:port/database?optionsДля удобства Laravel поддерживает эти URL-адреса в качестве альтернативы настройке базы данных с несколькими параметрами конфигурации. Если присутствует параметр конфигурации url (или соответствующая переменная DATABASE_URL окружения), то он будет использоваться для получения информации о соединении с базой данных и об учетных данных.
Соединения для чтения и записи
По желанию можно использовать одно соединение с базой данных для операторов SELECT , а другое – для операторов INSERT , UPDATE и DELETE . Laravel упрощает эту задачу, и всегда будут использоваться соответствующие соединения, независимо от того, используете ли вы сырые запросы построителя запросов или Eloquent ORM.
Чтобы увидеть, как должны быть настроены соединения для чтения / записи, давайте посмотрим на этот пример:
'mysql' => [ 'read' => [ 'host' => [ '192.168.1.1', '196.168.1.2', ], ], 'write' => [ 'host' => [ '196.168.1.3', ], ], 'sticky' => true, 'driver' => 'mysql', 'database' => 'database', 'username' => 'root', 'password' => '', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', ],Обратите внимание, что в массив конфигурации были добавлены три ключа: read , write и sticky . Ключи read и write имеют значения массива, содержащие один ключ: host . Остальные параметры базы данных для соединений read и write будут объединены из основного массива конфигурации mysql .
В массивы read и write вам нужно помещать только те элементы, значения которых вы хотите переопределить из основного массива mysql . Таким образом, в этом случае 192.168.1.1 будет использоваться в качестве хоста для соединения «чтение», а 192.168.1.3 – для соединения «запись». Учетные данные БД, префикс, набор символов и все другие параметры из основного массива mysql будут совместно использоваться обоими соединениями. Если в массиве конфигурации host существует несколько значений, то для каждого запроса хост базы данных будет выбран случайным образом.
Параметр sticky
Параметр sticky – это необязательное значение, которое может использоваться для разрешения немедленного чтения записей, которые были записаны в базу данных во время текущего цикла запроса. Если опция sticky включена и в текущем цикле запроса к базе данных была выполнена операция «записи», то любые дальнейшие операции «чтения» будут использовать соединение «запись». Это гарантирует, что любые данные, записанные во время цикла запроса, могут быть немедленно обратно прочитаны из базы данных во время того же запроса. Вам решать, является ли это желаемым поведением для вашего приложения.
Выполнение SQL-запросов
После того как вы настроили соединение с базой данных, вы можете выполнять запросы, используя фасад DB . Фасад DB содержит методы для каждого типа запроса: select , update , insert , delete , и statement .
Выполнение Select-запроса
Чтобы выполнить базовый запрос SELECT , вы можете использовать метод select фасада DB :
namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\DB; class UserController extends Controller < /** * Показать список всех пользователей приложения. * * @return \Illuminate\Http\Response */ public function index() < $users = DB::select('select * from users where active = ?', [1]); return view('user.index', ['users' => $users]); > >Первым аргументом, переданным методу select , является SQL-запрос, а вторым аргументом – любые привязки параметров, необходимые для запроса. Обычно это значения ограничений выражений where . Привязка параметров обеспечивает защиту от SQL-инъекций.
Метод select всегда возвращает «массив» результатов. Каждый результат в массиве будет объектом stdClass PHP, представляющим запись из базы данных:
use Illuminate\Support\Facades\DB; $users = DB::select('select * from users'); foreach ($users as $user) < echo $user->name; >Использование именованных псевдопеременных
Вместо использования символа ? для связывания параметров вы можете выполнить запрос, используя именованные привязки:
$results = DB::select('select * from users where ['id' => 1]);Выполнение Insert-запроса
Чтобы выполнить запрос с INSERT , вы можете использовать метод insert фасада DB . Как и select , этот метод принимает запрос SQL в качестве первого аргумента, а привязки – в качестве второго аргумента:
use Illuminate\Support\Facades\DB; DB::insert('insert into users (id, name) values (?, ?)', [1, 'Marc']);Выполнение Update-запроса
Метод update следует использовать для обновления существующих записей в базе данных. Количество затронутых выражением строк будут возвращены этим методом:
use Illuminate\Support\Facades\DB; $affected = DB::update( 'update users set votes = 100 where name = ?', ['Anita'] );Выполнение Delete-запроса
Для удаления записей из базы данных следует использовать метод delete . Как и update , количество затронутых выражением строк будут возвращены этим методом:
use Illuminate\Support\Facades\DB; $deleted = DB::delete('delete from users');Выполнение запроса общего типа
Некоторые операторы базы данных не возвращают никакого значения. Для этих типов операций вы можете использовать метод statement фасада DB :
DB::statement('drop table users');Выполнение неподготовленного запроса
По желанию может потребоваться выполнить запрос SQL без привязки каких-либо значений. Для этого используйте метод unprepared фасада DB :
DB::unprepared('update users set votes = 100 where name = "Dries"');Поскольку неподготовленные запросы не связывают параметры, они могут быть уязвимы для SQL-инъекций. Вы никогда не должны пропускать в неподготовленное выражение значения, управляемые пользователем.
Неявные фиксации (implicit commit)
При использовании в транзакциях методов statement и unprepared фасада DB вы должны быть осторожны, чтобы избежать операторов, которые вызывают неявные фиксации. Эти операторы заставят ядро базы данных косвенно зафиксировать всю транзакцию, в результате чего Laravel не будет знать об уровне транзакции базы данных. Примером такого оператора является создание таблицы базы данных:
DB::unprepared('create table a (col varchar(1) null)');Пожалуйста, обратитесь к руководству по MySQL для ознакомления со списком всех операторов, которые выполняют неявные фиксации.
Использование нескольких соединений к базе данных
Если ваше приложение определяет несколько соединений в конфигурационном файле config/database.php , то вы можете получить доступ к каждому соединению с помощью метода connection фасада DB . Имя соединения, передаваемое методу connection , должно соответствовать одному из подключений, перечисленных в вашем конфигурационном файле config/database.php , включая переопределенные с помощью глобального помощника config во время выполнения скрипта:
use Illuminate\Support\Facades\DB; $users = DB::connection('sqlite')->select(. );Вы можете получить доступ к сырому, базовому экземпляру PDO текущего соединения, используя метод getPdo экземпляра соединения:
$pdo = DB::connection()->getPdo();Прослушивание событий запроса
По желанию можно указать замыкание, которое будет вызываться для каждого SQL-запроса, выполняемого вашим приложением, используя метод listen фасада DB . Этот метод может быть полезен для логирования запросов или их отладки. Вы можете зарегистрировать замыкание слушателя запросов в методе boot поставщика служб:
namespace App\Providers; use Illuminate\Support\Facades\DB; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider < /** * Регистрация любых служб приложения. * * @return void */ public function register() < // > /** * Загрузка любых служб приложения. * * @return void */ public function boot() < DB::listen(function ($query) < // $query->sql; // $query->bindings; // $query->time; >); > >Транзакции базы данных
Вы можете использовать метод transaction фасада DB , для выполнения набора операций в транзакции базы данных. Если при закрытии транзакции возникает исключение, то транзакция автоматически откатывается, а исключение генерируется повторно. Если замыкание выполнено успешно, то транзакция будет автоматически зафиксирована. Вам не нужно беспокоиться о ручном откате или фиксации при использовании метода transaction :
use Illuminate\Support\Facades\DB; DB::transaction(function () < DB::update('update users set votes = 1'); DB::delete('delete from posts'); >);Обработка взаимоблокировок
Метод transaction принимает необязательный второй аргумент, который определяет, сколько раз транзакция должна быть повторена при возникновении взаимоблокировок. Как только эти попытки будут исчерпаны, будет выброшено исключение:
use Illuminate\Support\Facades\DB; DB::transaction(function () < DB::update('update users set votes = 1'); DB::delete('delete from posts'); >, 5);Использование транзакций вручную
Если вы хотите вручную начать транзакцию и иметь полный контроль над откатами и фиксациями, то вы можете использовать метод beginTransaction фасада DB :
use Illuminate\Support\Facades\DB; DB::beginTransaction();Вы можете откатить транзакцию с помощью метода rollBack :
DB::rollBack();Наконец, вы можете зафиксировать транзакцию с помощью метода commit :
DB::commit();Методы транзакций фасада DB контролируют транзакции как для построителя запросов, так и для Eloquent ORM.
Подключение к базе данных с помощью интерфейса командной строки Artisan
Если вы хотите подключиться к своей базе данных с помощью интерфейса командной строки, то вы можете использовать команду db Artisan:
php artisan dbПри необходимости, вы можете указать имя соединения для подключения к базе данных, не являющееся соединением по умолчанию:
php artisan db mysqlРусскоязычное комьюнити
- Группа в VK
- Телеграм LaravelRUS
- Телеграм Laravel для новичков
- Телеграм LaravelPro
Обучающие ресурсы
- Laracasts
- Codecourse
- Курс Дмитрия Елисеева
- Adam Wathan
Блоги разработчиков
- Laravel News
- Freek Van der Herten
- Brent Roose
- Marcel Pociot
