Создание бд с помощью sql. Пример создания локальной базы данных Microsoft SQL Server в MS Visual Studio. Типы данных SQL

В организации базы данных задействуется большое число различных объектов. Все объекты базы данных являются либо физическими, либо логическими. Физические объекты связаны с организацией данных на физических устройствах (дисках). Физическими объектами компонента Database Engine являются файлы и файловые группы. Логические объекты являются пользовательскими представлениями базы данных. В качестве примера логических объектов можно назвать таблицы, столбцы и представления (виртуальные таблицы).

Объектом базы данных, который требуется создать в первую очередь, является сама база данных. Компонент Database Engine управляет как системными, так и пользовательскими базами данных. Пользовательские базы данных могут создаваться авторизованными пользователями, тогда как системные базы данных создаются при установке СУБД.

Для создания базы данных используется два основных метода. В первом методе задействуется обозреватель объектов среды SQL Server Management Studio, как было показано ранее, а во втором применяется инструкция языка Transact-SQL CREATE DATABASE . Далее приводится общая форма этой инструкции, а затем подробно рассматриваются ее составляющие:

CREATE DATABASE db_name { file_spec1} ,...] Соглашения по синтаксису

Параметр db_name - это имя базы данных. Имя базы данных может содержать максимум 128 символов. Одна система может управлять до 32 767 базами данных. Все базы данных хранятся в файлах, которые могут быть указаны явно администратором или предоставлены неявно системой. Если инструкция CREATE DATABASE содержит параметр ON , все файлы базы данных указываются явно.

Компонент Database Engine хранит файлы данных на диске. Каждый файл содержит данные одной базы данных. Эти файлы можно организовать в файловые группы. Файловые группы предоставляют возможность распределять данные по разным приводам дисков и выполнять резервное копирование и восстановление частей базы данных. Это полезная функциональность для очень больших баз данных.

Параметр file_spec1 представляет спецификацию файла и сам может содержать дополнительные опции, такие как логическое имя файла, физическое имя и размер. Параметр PRIMARY указывает первый (и наиболее важный) файл, который содержит системные таблицы и другую важную внутреннюю информацию о базе данных. Если параметр PRIMARY отсутствует, то в качестве первичного файла используется первый файл, указанный в спецификации.

Учетная запись компонента Database Engine, применяемая для создания базы данных, называется владельцем базы данных . База данных может иметь только одного владельца, который всегда соответствует учетной записи. Учетная запись, принадлежащая владельцу базы данных, имеет специальное имя dbo . Это имя всегда используется в отношении базы данных, которой владеет пользователь.

Опция LOG ON параметра dbo определяет один или более файлов в качестве физического хранилища журнала транзакций базы данных. Если опция LOG ON отсутствует, то журнал транзакций базы данных все равно будет создан, поскольку каждая база данных должна иметь, по крайней мере, один журнал транзакций. (Компонент Database Engine ведет учет всем изменениям, которые он выполняет с базой данных. Система сохраняет все эти записи, в особенности значения до и после транзакции, в одном или более файлов, которые называются журналами транзакций. Для каждой базы данных системы ведется ее собственный журнал транзакций.)

В опции COLLATE указывается порядок сортировки по умолчанию для базы данных. Если опция COLLATE не указана, базе данных присваивается порядок сортировки по умолчанию, совершенно такой же, как и порядок сортировки по умолчанию системы баз данных.

В опции FOR ATTACH указывается, что база данных создается за счет подключения существующего набора файлов. При использовании этой опции требуется явно указать первый первичный файл. В опции FOR ATTACH_REBUILD_LOG указывается, что база данных создается методом присоединения существующего набора файлов операционной системы.

Компонент Database Engine создает новую базу данных по шаблону образцовой базы данных model. Свойства базы данных model можно настраивать для удовлетворения персональных концепций системного администратора. Если определенный объект базы данных должен присутствовать в каждой пользовательской базе данных, то этот объект следует сначала создать в базе данных model.

В примере ниже показан код для создания простой базы данных, без указания дополнительных подробностей. Чтобы исполнить этот код, введите его в редактор запросов среды Management Studio и нажмите клавишу .

USE master; CREATE DATABASE SampleDb;

Код, приведенный в примере, создает базу данных, которая называется SampleDb. Такая сокращенная форма инструкции CREATE DATABASE возможна благодаря тому, что почти все ее параметры имеют значения по умолчанию. По умолчанию система создает два файла. Файл данных имеет логическое имя SampleDb и исходный размер 2 Мбайта. А файл журнала транзакций имеет логическое имя SampleDb_log и исходный размер 1 Мбайт. (Значения размеров обоих файлов, а также другие свойства новой базы данных зависят от соответствующих спецификаций базы данных model.)

В примере ниже показано создание базы данных с явным указанием файлов базы данных и журнала транзакций:

USE master; CREATE DATABASE Projects ON (NAME=projects_dat, FILENAME = "D:\projects.mdf", SIZE = 10, MAXSIZE = 100, FILEGROWTH = 5) LOG ON (NAME=projects_log, FILENAME = "D:\projects.ldf", SIZE = 40, MAXSIZE = 100, FILEGROWTH = 10);

Созданная в примере база данных называется Projects. Поскольку опция PRIMARY не указана, то первичным файлом предполагается первый файл. Этот файл имеет логическое имя projects_dat и он сохраняется в дисковом файле projects.mdf. Исходный размер этого файла 10 Мбайт. При необходимости, система выделяет этому файлу дополнительное дисковое пространство в приращениях по 5 Мбайт. Если не указать опцию MAXSIZE или если этой опции присвоено значение UNLIMITED, то максимальный размер файла может увеличиваться и будет ограничиваться только размером всего дискового пространства. (Единицу размера файла можно указывать с помощью суффиксов KB, TB и MB, означающих килобайты, терабайты и мегабайты соответственно. По умолчанию используется единица размера MB, т.е. мегабайты.)

Кроме файла данных создается файл журнала транзакций, который имеет логическое имя projects_log и физическое имя projects.ldf. Все опции спецификации файла журнала транзакций имеют такие же имена и значения, как и соответствующие опции для спецификации файла данных.

В языке Transact-SQL можно указать конкретный контекст базы данных (т.е. какую базу данных использовать в качестве текущей) с помощью инструкции USE . (Альтернативный способ - выбрать имя требуемой базы данных в раскрывающемся списке Database (Базы данных) в панели инструментов среды SQL Server Management Studio.)

Системный администратор может назначить пользователю текущую базу данных по умолчанию с помощью инструкции CREATE LOGIN или инструкции ALTER LOGIN. В таком случае пользователям не нужно выполнять инструкцию USE, если только они не хотят использовать другую базу данных.

Создание моментального снимка базы данных

Кроме создания новой базы данных, инструкцию CREATE DATABASE можно применить для получения моментального снимка существующей базы данных (база данных-источник). Моментальный снимок базы данных является согласованной с точки зрения завершенных транзакций копией исходной базы данных на момент создания моментального снимка. Далее показан синтаксис инструкции для создания моментального снимка базы данных:

Таким образом, чтобы создать моментальный снимок базы данных, в инструкцию CREATE DATABASE нужно вставить предложение AS SNAPSHOT OF . В примере ниже иллюстрируется создание моментального снимка базы данных SampleDb и сохранения его в папке D:\temp. (Прежде чем выполнять этот пример, нужно создать данный каталог.)

USE master; CREATE DATABASE SampleDb ON (NAME = "SampleDb_Data" , FILENAME = "D:\temp\snapshot_DB.mdf") AS SNAPSHOT OF SampleDb;

Моментальный снимок существующей базы данных - это доступная только для чтения копия базы данных-источника, которая отражает состояние этой базы данных на момент копирования. (Таким образом, можно создавать множественные моментальные снимки существующей базы данных.) Файл моментального снимка (в примере выше это файл D:\temp\snapshot_DB.mdf) содержит только измененные данные базы данных-источника. Поэтому в коде для создания моментального снимка необходимо указывать логическое имя каждого файла данных базы данных-источника, а также соответствующие физические имена.

Поскольку моментальный снимок содержит только измененные данные, то для каждого снимка требуется лишь небольшая доля дискового пространства, требуемого для соответствующей базы данных-источника.

Моментальные снимки баз данных можно создавать только на дисках с файловой системой NTFS (New Technology File System - файловая система новой технологии), т.к. только эта файловая система поддерживает технологию разреженных файлов, применяемую для хранения моментальных снимков.

Моментальные снимки баз данных обычно применяются в качестве механизма предохранения данных от искажения.

Присоединение и отсоединение баз данных

Все данные базы данных можно отсоединить, а потом снова присоединить к этому же или другому серверу базы данных. Эта функциональность используется при перемещении базы данных.

Для отсоединения базы данных от сервера баз используется системная процедура sp_detach_db . (Отсоединяемая база данных должна находиться в однопользовательском режиме.)

Для присоединения базы данных используется инструкция CREATE DATABASE с предложением FOR ATTACH. Для присоединяемой базы данных должны быть доступными все требуемые файлы. Если какой-либо файл данных имеет путь, отличающийся от исходного пути, то для этого файла необходимо указать текущий путь.

Инсталлируйте программное обеспечение SQL Server Management Studio. Это программное обеспечение можно бесплатно загрузить с сайта Microsoft. Оно позволяет вам подключаться и управлять вашим SQL сервером через графический интерфейс вместо того, чтобы использовать командную строку.

Запустите SQL Server Management Studio. При первом запуске программы вам будет предложено выбрать, к какому сервер подключаться. Если у вас уже есть сервер и вы работаете, имеете необходимые разрешения для подключения к нему, то можете ввести адрес сервера и идентификационную информацию. Если вы хотите создать локальную базу данных, установите имя базы данных Database Name как. и тип аутентификации как "Windows Authentication".

  • Нажмите кнопку Подключить чтобы продолжить.
  • Определите место для папки Databases. После выполнения соединения с сервером (локальное или удаленное), откроется окно обозревателя объектов Object Explorer в левой стороне экрана. В верхней части дерева обозревателя объектов будет сервер, к которому вы подключены. Если дерево не расширено, нажмите на значок "+" рядом с ним. Определите место папки базы данных Databases.

    Создайте новую базу данных. Щелкните правой кнопкой мыши по папке Databases и выберите пункт "New Database...". Появится окно, которое позволяет настроить базу данных перед ее созданием. Дайте имя базе данных, которое поможет вам идентифицировать ее. Большинство пользователей могут оставить значения остальных настроек по умолчанию.

    • Вы заметите, что при вводе имени базы данных два дополнительных файла будут созданы автоматически: Data и Log. Файл данных (Data) вмещает все данные в вашей базе данных, в то время как файл журнала (Log) отслеживает изменения в базе данных.
    • Нажмите кнопку OK, чтобы создать базу данных. Вы увидите вашу новую базу данных, которая появится в развернутой папке Databases. Она будет иметь значок цилиндра.
  • Создайте таблицу. База данных может только хранить данные, если вы создаете структуру для этих данных. Таблица содержит информацию, которую вы вводите в вашу базу данных, и вам нужно будет создать ее, прежде чем можете продолжить. Разверните новую базу данных в папке Databases, и щелкните правой кнопкой мыши на папке Tables и выберите пункт "New Table...".

    • Windows откроется в остальной части экрана, позволяя вам управлять вашей новой таблицей.
  • Создайте Primary Key (первичный ключ). Настоятельно рекомендуется, чтобы вы создавали первичный ключ в качестве первого столбца в вашей таблице. Он действует как идентификационный номер, или номер записи, что позволит вам легко выводить эти записи позже. Для его создания введите "ID" в столбце Name field, тип int в поле Data Type и снимите флажок "Allow Nulls". Нажмите на значок Key iна панели инструментов, чтобы установить этот столбец в качестве Primary Key (первичного ключа).

    • Вы же не хотите допустить нулевые значения, так как всегда хотите иметь запись по крайней мере "1". Если вы разрешите 0, ваша первая запись будет "0".
    • В окне Column Properties прокрутите вниз, пока не найдете опцию Identity Specification. Разверните ее и установите "(ls Identity)" на "Yes". Эта опция автоматически увеличит значение столбца ID для каждой записи, автоматически нумеруя каждую новую запись.
  • Разберитесь, как устроены таблицы. Таблицы состоят из полей или столбцов. Каждый столбец представляет один из аспектов записи базы данных. Например, если вы создаете базу данных сотрудников, вы можете иметь столбец "FirstName", столбец "LastName", столбец "Address" и столбец "PhoneNumber".

    Создайте остальные столбцы. Когда закончите заполнение полей для Primary Key, заметите, что новые поля появляются под ним. Это позволит вам войти в свой следующий столбец. Заполните поля, как считаете нужным, и убедитесь, что правильно выбрали тип данных для информации, которая будет введена в этом столбце:

    • nchar(#) - это тип данных следует использовать для текста, как имена, адреса и т.д. Число в скобках – это максимальное количество символов, разрешенное для это го поля. Установление лимита гарантирует, что ваш размер базы данных остается управляемым. Номера телефонов должны быть сохранены в этом формате, так как вы не выполняете математические функции с ними.
    • int - это целые числа, и обычно используются в поле идентификатора.
    • decimal(x,y) - будут хранить числа в десятичной форме, а числа в скобках обозначают соответственно общее количество цифр и количество цифр после десятичной. Например, decimal(6,2) будет сохранять числа как 0000.00.
  • Сохраните вашу таблицу. Когда вы закончите создавать свои столбцы, то вам нужно сохранить таблицу перед вводом информации. Щелкните на значке Save на панели инструментов, а затем введите название таблицы. Рекомендуется присваивать имя таблице таким образом, чтобы оно помогло вам распознать содержимое, особенно для больших баз данных с несколькими таблицами.

    Добавьте данные в вашу таблицу. После того, как вы сохранили таблицу, можете начать добавлять в нее данные. Откройте папку Tables в окне обозревателя объектов Object Explorer. Если вашей новой таблицы нет в списке, щелкните правой кнопкой мыши на папке Tables и выберите Refresh. Щелкните правой кнопкой мыши по таблице и выберите "Edit Top 200 Rows".

    В составе Microsoft Visual Studio 2008 находится сервер баз данных Microsoft SQL Server 2005 Express Edition. От полнофункционального сервера данных он отличается только ограничением размера базы данных в 2 гигабайта, что позволяет производить разработку и тестирование приложений баз данных.

    Для работы по созданию базы данных и таблиц будем использовать Microsoft SQL Server Management Studio Express. Данный программный продукт является свободнораспространяемым и доступен для скачивания в Интернет.

    1.4.1. Определение структуры базы данных

    Внешний вид окна программы Microsoft SQL Server Management Studio Express приведен на рис. 14.

    Рис. 14. Внешний вид окна программы Microsoft SQL Server Management Studio Express

    Для создания базы данных необходимо кликнуть правой кнопкой мыши на пункте «Базы данных» и выбрать пункт меню «Создать базу данных». Окно создания БД представлено на рис. 15.

    Рис. 15. Окно создания БД

    В данном окне задается имя базы данных, имена и пути к файлам базы данных, начальный размер файлов и шаг увеличения размера БД в случае необходимости. После нажатия кнопки «ОК» созданная БД появляется в списке баз данных (рис. 16).

    Рис. 16. Вид Management Studio с созданной базой данных

    Созданная база данных пуста, т. е. не содержит ни одной таблицы. Поэтому следующей задачей является создание таблиц, структура которых аналогична таблицам из базы данных Access. При создании таблиц необходимо обратить внимание на соотношения типов Access и SQL Server, представленные в таблице 6.

    Таблица 6. Соответствие типов данных Microsoft Access и Microsoft SQL

    Тип данных Microsoft Access

    Тип данных Microsoft SQL

    Описание типа данных Microsoft SQL

    Текстовый

    Тип данных для хранения текста до 4000 символов

    Поле МЕМО

    Тип данных для хранения символов в кодировке Unicode до 1 073 741 823 символов

    Числовой

    Численные значения (целые) в диапазоне от -2 147 483 648 до +2 147 483 647

    Дата/время

    Денежный

    Денежный тип данных, значения которого лежат в диапазоне

    от -922 337 203 685 477.5808 до +922 337 203 685 477.5807, с точностью до одной десятитысячной

    См. пункт 3

    Логический

    Переменная, способная принимать только два значения - 0 или 1

    Поле объекта OLE

    Переменная для хранения массива байтов от 0 до 2 147 483 647 байт

    См. пункт 2

    Мастер подстановок

    См. пункт 1

    Для создания таблиц необходимо выбрать в контекстном меню ветки «Таблицы» пункт «Создать таблицу». Среда Management Studio принимает следующий вид (рис. 17).

    Рис. 17. Среда Management Studio в режиме создания таблицы

    Для определения связей между таблицами необходимо задать первичные ключи таблиц. Для этого в контекстном меню соответствующего поля выбрать пункт «Задать первичный ключ» (рис. 18).

    Рис. 18. Задание первичного ключа

    Для создания связей между таблицами и схемы базы данных необходимо создать новую диаграмму базы данных, выбрав соответствующий пункт в контекстном меню ветви «Диаграммы баз данных». Добавив в появившемся окне необходимые таблицы в диаграмму, получаем следующий вид среды Management Studio (рис. 19).

    Рис. 19. Начало построения диаграммы БД

    Создание связей происходит путем совмещения связываемых полей. Результатом становится появление окна создания отношения (рис. 20).

    Рис. 20. Создание отношения между таблицами БД

    Особо отметим пункт «Спецификация INSERT и UPDATE», задающий правила обновления и удаления связанных данных в таблицах.

    После создания остальных таблиц и их связей схема данных будет выглядеть следующим образом (рис. 21).

    В отличие от схемы данных Microsoft Access, здесь линии, отображающие связи по умолчанию, не привязываются графически к первичным и вторичным полям. Однако при щелчке левой кнопкой на любой связи в панели свойств появляется информация о выбранном отношении.

    Завершив работу со схемой данных, сохраняем ее. Отметим, что в SQL Management Studio, в отличие от Access, для одной базы данных может быть создано несколько диаграмм (рис. 22).

    Данная возможность является полезной для баз данных с очень большим количеством таблиц, так как одна общая диаграмма была бы слишком нагруженной.

    Рис. 21. Схема базы данных BDTur_firmSQL

    Рис. 22. Несколько диаграмм для одной БД

    Заключительно частью моделирования информационной системы является создание реальной базы данных, опираясь на проведенное выше проектирование. Сюда входит выбор подходящей базы данных, ее развертывание и настройка, создание объектов структуры базы данных при помощи соответствующих средств, наполнение БД тестовым набором данных.

    Для реализации реляционной базы данных предложенной структуры в данной курсовой работе выбрана СУБД MS SQL Server - один из лидеров современного рынка реляционных СУБД, распространяемая свободно для разработки или тестирования приложений и лицензируемой для промышленного использования. Преимуществами MS SQL являются:

    Высокая функциональность;

    Полная поддержка стандарта SQL и его расширения T-SQL;

    Широкая распространенность и доступность поддержки;

    Надёжность;

    Производительность.

    Наличие встроенных средств для работы и администрирования БД.

    MS SQL является лидером современного рынка реляционных СУБД. Актуальной стабильной версией MS SQL на момент написания работы была версия 2012. Установка данной СУБД не представляет трудностей. Процесс установки сопровождается мастером, который запрашивает у пользователя необходимые данные и дальше самостоятельно устанавливает сервер БД, настраивает его на оптимальное быстродействие.

    Для создания базы данных в СУБД MS SQL использовались запросы на ста­н­­дартизированном языке SQL (англ. Structured Query Language, «Струк­ту­ри­ро­ванный язык запросов»). В процессе создания базы данных для всех ат­ри­бу­тов реляционной были указаны подходящие типы данных. Названия сущностей и атрибутов были переведены на английский язык, ключевые поля сфор­ми­ро­ва­ны с префикса «ID_» и суффикса, состоящего из имени связанной с ним таб­ли­цы. В таблице 8 показано соответствие названия сущности физической таблице в БД.

    Таблица 8

    Соответствие названия сущности физической таблице

    Сущность

    Виды транспорта

    Физическая модель информационной системы в БД показана на рис. 5.

    Рис. 5. Физическая модель информационной системы

    Исходный код создания всех отношений базы данных представлен в Приложении к данной работе.

    После создания базы данных её было наполнено пробным набором данных. Исходный код запросов на заполнение базы тестовым набором данных представлен в Приложении к данной работе.

    Созданные на сервере таблицы базы данных показаны на рис. 6.

    Рис. 6. Диаграмма данных сервера MS SQL

    5. Разработка объектов базы данных, демонстрирующих логику предметной области

    Для демонстрации работоспособности логики работы базы данных создадим в ней и продемонстрируем работу на тестовом наборе данных следующих объектов:

    • Представления;

      Хранимые процедуры;

      Триггеры.

    Запросы на базу данных.

    Представляют собой базовое средство для получения информации из базы данных. Для написания запроса используется стандарт SQL. Для демонстрации напишем запрос, выводящий перечень туристов, отправившихся отдыхать в отель «San Simeon Apartments», фамилии туристов отсортируем по алфавиту. Запрос и результат его выполнения показан на рис. 7.

    Рис. 7. Результат выполнения запроса

    Представления - виртуальные объекты баз данных, отражающие данные в определенной форме из содержимого других объектов. Текст представления представляет собой SQL запрос на получения данных из одной или нескольких таблиц, других представлений, результатов выполнения процедур. Для демонстрации работы логики на тестовых данных, создадим представление, отображающую таблицу путевок и все расшифровывающую значения всех связанных, ключевых полей. Текст представления и результат его выполнения показан на рис. 8.

    Рис. 8. Представление и результат его работы

    Хранимые процедуры. Это объекты в базе данных, позволяющие хранить в ней наборы инструкций по обработке и изменению данных. Текст процедуры пишется на диалекте языка SQL для MS SQL Server, называемом Transacts SQL или сокращенно T-SQL. Для демонстрации напишем хранимую процедуру, позволяющую изменять на заданный процент стоимость проживания во всех отелях. Текст хранимой процедуры показан на рис. 9.

    Рис. 9. Хранимая процедура

    Триггеры. Это специальная хранимая процедура, которая вызывается не пользователем, а самим сервером БД в ответ на событие INSERT, DELETE, UPDATE на указанной таблице. Триггеры широко используются программистами для автоматизации контроля и изменений данных в БД. Как правило, триггер работает незаметно для пользователя БД и проявляет себя тогда, когда он вводит ошибочные с точки зрения программиста данные. Припустим, что туристическое агентство не работает с детьми младше 10 лет. Напишем триггер, который не позволит ввести возраст туриста меньше 10 лет. Текст триггера показан на рис. 10.

    Рис. 10. Триггер, не позволяющий внести возраст туриста меньше 10 лет

    Введение

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

    Виды СУБД

    Существует несколько видов СУБД по способу организации хранения данных:
    • Иерархические. Данные организованы в виде древовидной структуры. Пример - файловая система, которая начинается с корня диска и далее прирастает ветвями файлов разных типов и папок разной степени вложенности.
    • Сетевые. Видоизменение иерархической, у каждого узла может быть больше одного родителя.
    • Объектно-ориентированные. Данные организованы в виде классов/объектов c их атрибутами и принципами взаимодействия согласно ООП.
    • Реляционные. Данные этого вида СУБД организованы в таблицах. Таблицы могут быть связаны друг с другом, информация в них структурирована.
    В цикле статей будем рассматривать именно реляционные СУБД (как самые распространённые) на примере H2 и создавать с нуля приложение, эмулирующую подобие работы биржи. Вопрос: Почему не PostgreSQL, MySQL, MSSQL или Oracle? Ответ: Чтобы не отвлекаться на вопросы установки отдельного комплекса программ. Дальнейшей настройки, создания БД, тонкостей работы в разных ОС, версий. Для работы с H2 необходимо совершить минимум действий. Но ничего не мешает поменять текущую H2 JDBC на реляционную СУБД другого производителя (изменяется только строка адреса сервера и имя класса драйвера).

    SQL

    Внешние программы формируют запросы к СУБД на языке управления данными Structured Query Language. Что такое SQL и чем отличается от привычных языков программирования? Одна из особенностей SQL – декларативность. То есть, SQL - декларативный язык . Это значит, что, вбивая команды, то есть, создавая запросы к SQL-серверу, мы описываем, что именно хотим получить, а не каким способом. Посылая серверу запрос SELECT * FROM CUSTOMER (приблизительный перевод с SQL на русский: «сделать выборку из таблицы COSTUMER, выборка состоит из всех строк таблица» ), мы получим данные по всем пользователям. Совершенно неважно, как и откуда сервер загрузит и сформирует интересующие нас данные. Главное – правильно сформулировать запрос.
    • Что такое SQL-Сервер и как он работает? Взаимодействие с СУБД происходит по клиент-серверному принципу. Некая внешняя программа посылает запрос в виде операторов и команд на языке SQL, СУБД его обрабатывает и высылает ответ. Для упрощения примем, что SQL Сервер = СУБД.
    Если вы умеете управлять легковым автомобилем одной марки, вы, скорее всего, без особых проблем сможете сесть за руль и других. Основы вождения везде одинаковы, за исключением небольших деталей. Аналогично и для SQL-серверов разных производителей - у каждого из них своя версия SQL, но она удовлетворяет заданным стандартам (SQL92, SQL2003 …). Мы будем использовать операторы и команды в рамках SQL92. Основные SQL-операторы подразделяют на следующие группы:
    • Data Definition Language (DDL ) – определения данных. Создание структуры БД и её объектов;
    • Data Manipulation Language(DML ) – собственно взаимодействие с данными: вставка, удаление, изменение и чтение;
    • Transaction Control Language (TCL ) – управление транзакциями;
    • Data Control Language(DCL ) – управление правами доступа к данным и структурам БД.
    В цикле статей мы рассмотрим первые три группы, особо уделяя внимание DML.

    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 . Итак: Теперь мы умеем подключаться к СУБД и отключаться от неё. Каждый шаг отражается в консоли. При первом подключении к СУБД создаётся файл базы данных 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 !" ) ; } } }

    Блок констант:

    1. DB_Driver : Здесь мы определили имя драйвера, которое можно узнать, например, кликнув мышкой на подключенную библиотеку и развернув её структуру в директории lib текущего проекта.
    2. DB_URL : Адрес нашей базы данных. Состоит из данных, разделённых двоеточием:
    3. Протокол=jdbc
    4. Вендор (производитель/наименование) СУБД=h2
    5. Расположение СУБД, в нашем случае путь до файла (c:/JavaPrj/SQLDemo/db/stockExchange). Для сетевых СУБД тут дополнительно указываются имена или IP адреса удалённых серверов, TCP/UDP номера портов и так далее.

    Обработка ошибок:

    Вызов методов нашего кода может вернуть ошибки, на которые следует обратить внимание. На данном этапе мы просто информируем о них в консоли. Заметим, что ошибки при работе с СУБД - это чаще всего SQLException .

    Логика работы:

    1. Class.forName (DB_Driver) – убеждаемся в наличии соответствующего JDBC-драйвера (который мы ранее загрузили и установили).
    2. DriverManager.getConnection (DB_URL) – устанавливаем соединение СУБД. По переданному адресу, JDBC сама определит тип и местоположение нашей СУБД и вернёт Connection, который мы можем использовать для связи с БД.
    3. connection.close() – закрываем соединение с СУБД и завершаем работу с программой.
    В следующей части цикла мы познакомимся с DDL-операторами и типами SQL-данных, а также создадим начальную структуру нашей БД и наполним её таблицами.