Руководства, Инструкции, Бланки

Sqlite Руководство На Русском img-1

Sqlite Руководство На Русском

Рейтинг: 4.3/5.0 (1800 проголосовавших)

Категория: Руководства

Описание

Работа с SQLite

Автор - Гончаров А.Н.

Введение

SQLite – это реляционная база данных, запросы к которой можно осуществлять при помощи языка запросов SQL. База данных не поддерживает все особенности SQL и уступает в функциональности другим развитым СУБД, но вполне подходит для хранения и извлечения информации.

Отличие SQLite от MySQL и аналогичных СУБД

Классические СУБД, такие как MySQL (а так же MS SQL, Oracle, PostgreeSQL) состоят из отдельного сервера, поддерживающего работу базы данных и прослушивающих определённый порт, на предмет обращения клиентов. В качестве клиента может выступать в том числе и расширение PHP, реализующего интерфейс, с помощью которого осуществляются запросы к базе. Движок SQLite и интерфейс к ней реализованы в одной библиотеке, что увеличивает скорость выполнения запросов. Такой сервер часто называют встроенным .

Замечание

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

SQLite является бестиповой базой данных. Точнее, есть только два типа – целочисленный "integer" и текстовый "text". Причём "integer" используется преимущественно для первичного ключа таблицы, а для остальных данных пойдёт "text". Длина строки, записываемой в текстовое поле, может быть любой.

Особенности SQLite

Все базы данных хранятся в файлах, по одному файлу на базу. Количество баз данных, а так же таблиц в них, ограниченно только свободным местом, имеющимся на сайте. А максимально возможный объём одной базы данных составляет 2 Тб.

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

Установка SQLite

В PHP5 поддержка SQLite установлена и включена по умолчанию.

Установка под Windows: Для установки SQLite необходимо скачать и скопировать в папку с расширениями библиотеку "php_sqlite.dll", которую можно загрузить по ссылке: http://snaps.php.net/win32/PECL_STABLE/php_sqlite.dll. Затем необходимо раскомментировать (или добавить) строку "extension=php_sqlite.dll" в файле "php.ini". Для нормального функционирования SQLite также необходимо раскомментировать строку "extension=php_pdo.dll".

Замечание

Если используется полная версия PHP в zip-архиве, а не в виде инсталлятора, соответствующие библиотеки расширения должны находится в директории ext. Подробнее можно почитать в статье Установка Apache, PHP, MySQL .

Замечание

Библиотека "php_pdo.dll" должна загружаться до загрузки "php_sqlite.dll". То есть в php.ini строка "extension=php_sqlite.dll" должна стоять после "extension=php_pdo.dll".

Установка под Unix: Скачайте свежую версию SQLite с официального сайта (http://sqlite.org/download.html ). Прочтите файл "INSTALL", поставляемый с исходными тестами модуля. Или просто воспользуйтесь командой установки PEAR: "pear install sqlite".

Работа с SQLite

Создание базы данных: Для того чтобы создать новую базу данных необходимо воспользоваться функцией sqlite_open(). Если базы, имя которой указано в параметре "filename" не существует, то функция создаст новую базу данных с именем "filename" и вернёт идентификатор базы данных.

resource sqlite_open ( string filename [, int mode [, string &error_message]] )

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

<?php
// Создадим базу данных
$db = sqlite_open ( "my_database.db" );
if (! $db ) exit( "Не удалось создать базу данных!" );
?>

В результате в папке со скриптом у нас появится файл с именем "my_database.db" – наша база данных.

Создание таблиц: Все запросы к базе данных выполняет функция sqlite_query(), которая имеет следующий синтаксис:

resource sqlite_query ( resource dbhandle, string query )

Замечание

Для работы с SQLite, как и любой реляционной базой данных используется язык запросов SQL. Поэтому создать таблицу данных можно при помощи традиционного запроса CREATE TABLE, вставить запись при помощи оператора INSERT, извлечь запись при помощи SELECT, а обновить существующую запись при помощи запроса UPDATE.

В приведённом ниже примере создаётся таблица table1, содержащая три поля: целочисленное поле id, которое выступает в качестве первичного ключа, и два текстовых поля field1 и field2.

<?php
// Создадим новую базу данных
$db = sqlite_open ( "my_database.db" );
if (! $db ) exit( "Невозможно создать базу данных!" );
// Создадим таблицу "table1" в базе
$query_table = sqlite_query ( $db. "CREATE TABLE table1
(id INTEGER PRIMARY KEY,
/* id автоматически станет автоинкрементным */
field1 TEXT,
field2 TEXT);
" );
if (! $query_table ) exit( "Невозможно создать таблицу в базе данных!" );
// Запишем что-нибудь в таблицу
$query_insert = sqlite_query ( $db. "INSERT INTO table1(field1, field2) VALUES ('PHP5', 'Apache');" );
if (! $query_insert ) exit( "Невозможно записать данные в таблицу!" );
?>

После создания таблицы, в неё добавляется запись, содержащая строки 'PHP5' и 'Apache', поле id автоматически получает значение 1.

Вывод данных из базы: Для вывода данных из таблиц используется всё та же функция – sqlite_query(). Если выбирается несколько записей, результат выборки следует обработать при помощи цикла while() и функции sqlite_fetch_array(), которая имеет следующий синтаксис:

array sqlite_fetch_array ( resource result [, int result_type [, bool decode_binary]] )

Ниже приводится скрипт, демонстрирующий вывод нескольких записей из базы данных:

<?php
// Создадим новую базу данных
$db = sqlite_open ( "my_database.db" );
if (! $db ) exit( "Невозможно создать базу данных!" );
// Создадим таблицу "table1" в базе
$query_table = sqlite_query ( $db. "CREATE TABLE table1
(id INTEGER PRIMARY KEY,
/* id автоматически станет автоинкрементным */
field1 TEXT,
field2 TEXT);
" );
if (! $query_table ) exit( "Невозможно создать таблицу в базе данных!" );
// Запишем что-нибудь в таблицу
sqlite_query ( $db. "INSERT INTO table1(field1, field2) VALUES ('PHP5+', 'Apache');" );
sqlite_query ( $db. "INSERT INTO table1(field1, field2) VALUES ('SQLite – ', 'классная вещь');" );
sqlite_query ( $db. "INSERT INTO table1(field1, field2) VALUES ('Посетите ', 'sqlite.org');" );
// Сделаем выборку данных
$res = sqlite_query ( $db. "SELECT * FROM table1;" );
// В цикле выведем все полученные данные
while ( $array = sqlite_fetch_array ( $res ))
<
echo( $array [ 'field1' ]. $array [ 'field2' ]. " (id записи:". $array [ 'id' ]. ")<br />" );
>
?>

В результате работы скрипта получим:

PHP5+Apache (id записи:1)
SQLite – классная вещь (id записи:2)
посетите sqlite.org (id записи:3)

Редактрирование записи. Для изменения поля воспользуемся функцией sqlite_query() и передадим ей запрос на обновление (UPDATE).

<?php
// Создадим новую базу данных
$db = sqlite_open ( "my_database.db" );
if (! $db ) exit( "Невозможно создать базу данных!" );
// Создадим таблицу "table1" в базе
$query_table = sqlite_query ( $db. "CREATE TABLE table1
(id INTEGER PRIMARY KEY,
/* id автоматически станет автоинкрементным */
field1 TEXT,
field2 TEXT);
" );
if (! $query_table ) exit( "Невозможно создать таблицу в базе данных!" );
// Запишем что-нибудь в таблицу
sqlite_query ( $db. "INSERT INTO table1(field1, field2) VALUES ('PHP5+', 'Apache');" );
sqlite_query ( $db. "INSERT INTO table1(field1, field2) VALUES ('SQLite – ', 'классная вещь');" );
sqlite_query ( $db. "INSERT INTO table1(field1, field2) VALUES ('Посетите ', 'sqlite.org');" );
// Изменим поле с id=1
sqlite_query ( $db. "UPDATE table1 SET field2='Apache+Linux' WHERE id=1;" );
// Сделаем выборку данных
$query = sqlite_query ( $db. "SELECT * FROM table1;" );
// В цикле выведем все полученные данные
while ( $array = sqlite_fetch_array ( $query ))
<
echo( $array [ 'field1' ]. $array [ 'field2' ]. " (id записи:". $array [ 'id' ]. ")<br />" );
>
?>

В результате получим:

PHP5+Apache+Linux (id записи:1)
SQLite – классная вещь (id записи:2)
посетите sqlite.org (id записи:3)

Удаление записи из таблицы. Чтобы удалить запись из таблицы, нужно передать функции sqlite_query() запрос на удаление (DELETE).

<?php
// Создадим новую базу данных
$db = sqlite_open ( "my_database.db" );
if (! $db ) exit( "Невозможно создать базу данных!" );
// Создадим таблицу "table1" в базе
$query_table = sqlite_query ( $db. "CREATE TABLE table1
(id INTEGER PRIMARY KEY,
/* id автоматически станет автоинкрементным */
field1 TEXT,
field2 TEXT);
" );
if (! $query_table ) exit( "Невозможно создать таблицу в базе данных!" );
// Запишем что-нибудь в таблицу
sqlite_query ( $db. "INSERT INTO table1(field1, field2) VALUES ('PHP5+', 'Apache');" );
sqlite_query ( $db. "INSERT INTO table1(field1, field2) VALUES ('SQLite – ', 'классная вещь');" );
sqlite_query ( $db. "INSERT INTO table1(field1, field2) VALUES ('Посетите ', 'sqlite.org');" );
// Удалим поле с id=2
sqlite_query ( $db. "DELETE FROM table1 WHERE id=2;" );
// Сделаем выборку данных
$query = sqlite_query ( $db. "SELECT * FROM table1;" );
// В цикле выведем все полученные данные
while ( $array = sqlite_fetch_array ( $query ))
<
echo( $array [ 'field1' ]. $array [ 'field2' ]. " (id записи:". $array [ 'id' ]. ")<br />" );
>
?>

В результате получим:

PHP5+Apache (id записи:1)
посетите sqlite.org (id записи:3)

Закрытие базы данных. Для закрытия базы данных используется функция sqlite_close(). В качестве единственного параметра функция принимает идентификатор открытой базы данных.

void sqlite_close ( resource dbhandle )

Схема использования данной функции представлена ниже

<?php
$db = sqlite_open ( "my_database.db" );
/*
. Здесь происходит работа с БД.
*/
sqlite_close ( $db );
?>

Замечание

Закрывать базу данных данной функцией – необязательно. Все открытые базы данных автоматически закроются при завершении работы скрипта.

Ссылки

Другие статьи

Установка и запуск SQLite3 в Windows 7

Система управления базами данных SQLite. Изучаем язык запросов SQL на примере библиотекой SQLite3 Часть 1.3: Установка и запуск SQLite3 в Windows 7

Привет, посетитель сайта ZametkiNaPolyah.ru. Продолжаем рубрику реляционные базы данных и начинаем новый раздел библиотека SQLite. Давайте установим SQLite3 на наш компьютер. В принципе, установка SQLite - довольно простая и ошибиться здесь трудно. Я буду рассматривать установку SQLite3 на Windows 7. Замечу, что процесс установки SQLite на ОС семейства Windows одинаков.

Помните я уже писал о том, что SQLite3 — это два файла: библиотека и шелл? Вся установка заключается в том, чтобы распаковать архивы с этими двумя файлами.

Где скачать SQLite3

Рассмотрим процесс установки библиотеки SQLite на компьютер под управлением Windows 7. Хочу отметить, что SQLite3 – кросс платформенное приложение и работает одинаково на любой операционной системе.

Первый шаг, который нам нужно сделать – скачать SQLite3. Скачать SQLite3 можно на официальном сайте компании.

Со страницы Download нам необходимо скачать три архива:

  1. Архив с документацией sqlitedoc-3120200.zip. Документация очень помогает, когда нет доступа к интернету.
  2. Sqlitetoolswin32-x86-3120200.zip – это набор утилит для работы и администрирования с базами данных под управлением SQLite
  3. И на выбор скачиваем sqlitedllwin64-x64-3120200 или же sqlitedllwin32-x86-3120200. Выбор зависит от разрядности вашего процессора и операционной системы. Обратите внимание, что х86 можно установить на 64-ех битные системы и всё будет работать, но никак не наоборот.
Установка SQLite на Windows 7

Установим SQLite на компьютер: нам необходимо создать рабочую папку для библиотеки SQLite3.

Я буду устанавливать SQLite3 на диск C, поэтому в корне диска С создаю папку с названием SQLite.

В эту папку распаковываю три архива, которые скачал ранее. На самом деле мы уже установили библиотеку SQLite3 на компьютер. Всё, установка SQLite3 завершена.

Запуск библиотеки SQLite3

На самом деле, неправильно говорить: запуск SQLite. мы запускаем шелл, через который будем работать с библиотекой. Давайте попробуем ее запустить, для этого нажмем сочетание клавиш:Win+R. Запустится приложение «Выполнить». При помощи приложения «Выполнить» запускаем командную строку командой cmd.

В командной строке набираем sqlite3. Команда sqlite3 служит для запуска оболочки, через которую мы можем работать с базами данных. Но, к сожалению, оболочка не запустилась. А мы получили вот такое предупреждение: «sqlite3» не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

Для решения этой проблемы у нас есть два варианта:

  1. Мы можем перейти в папку, где находится файл sqlite.exe при помощи команды: cd c:\SQLite. После чего шелл библиотеки SQLite3 можно запустить.
  2. Мы можем добавить путь к файлу sqlite.exe в системную переменную PATH, тогда мы сможем запускать нашу консоль из любой папки на компьютере. Делается это так: нажимаем правой кнопкой мыши на «Компьютер» -> выбираем пункт «Свойства» -> «Дополнительные параметры системы» -> «Переменные среды». В разделе системные переменные находим PATH (если ее еще нет, то создаем) и нажимаем «Изменить». Обратите внимание: переменные разделяются символом точка с запятой. Поэтому ставим точку с запятой после последней переменной и добавляем свою. В моё случае: C:\SQLite\. Именно в этой папке у меня находится файл sqlite3.exe.

И последнее, что мы сделаем: создадим рабочую среду для библиотеки SQLite3. Всё дело в том, что библиотека SQLite3 создает файл с базой данных именной в той папке, откуда запущен шелл, поэтому я внутри папки C:\SQLite\. создам еще две: C:\SQLite\ExampleDB и C:\SQLite\ World DB, сюда я положу демонстрационный файл world.db3. База данных World – демонстрационная.

Немного о том, как создавать сайты и как продвигать сайт: Подпишись и будь в курсе всех новостей

Вы можете подписаться на RSS ленту сайта и быть в курсе всех последних новостей и обновлений: введи свой e-mail в соответстующую форму и нажмите кнопку "подписаться", таким образом все новости будут приходить на ваш почтовый ящик; либо воспользуйтесь кнопкой RSS. Подписавшись на социальные страницы ресурса, вы сможете учавствовать в опросах, тем самым, влияя на содержимое и качество контента сайта.

Как создавать сайты и как их продвигать Новое на сайте
  • Кирилл. Тимур, публикация уже немного устарела и в скором времени бу.
  • Тимур. Здравствуйте, я так понял, что ключевое слово var - использу.
  • Кирилл. Да, конечно, моя невнимательность погубит меня. )) Конечно.
  • gst80. Если не ошибаюсь при условии "WHERE a = 5 AND a = 6" не долж.
  • Искандер. У вас правильное замечание о том, что "в природе" нет четко.
  • Женька. Полезный справочник новичку с пояснениями, чтобы не утонуть.
  • Ильсур. От себя добавлю, что требования HTTP протокола не очень нужн.

SQLite - основы использования

SQLite - основы использования Введение. SQLite - мода или необходимость?

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

В Borland C++ Builder (Borland Delphi) для таких ситуаций можно использовать компонент TClientDataSet, позволяющий создать из таблиц БД (Paradox, DB) файл, который далее использовать в приложении полностью аналогично таблице базы данных. Собственно компонент TCLientDataSet позволял также, после загрузки файла из реальной таблицы БД, забыть на время о сервере доступа к данным и работать только с этим файлом (выполнять любое редактирование), а на этапе завершения приложения или на этапе необходимости публикации данных - перенести нужные данные в реальную таблицу БД.

Visual Studio Net не использует подобный механизм. Но все, что позволял компонент TCLientDataSet, в ней, с таким же успехом, можно выполнить, используя множество других способов. Я уже рассказал в своей книге в разделе "Работа с XML файлами в Visual Studio NET" про возможность применения для этой цели XML файлов, а в разделе "Работа с базами данных в Visual Studio" про возможность загрузки данных из таблиц БД в DataSet и обратного сохранения данных. Кроме того, средства .Net позволяют напрямую работать с файлами БД Access.

Но, как мы увидим, наиболее просто поставленная задача реализуется с использованием SQLite. Что дает право говорить именно так?
С точки зрения пользователя - SQLite, это одиночный файл на диске. Этот файл не требует для своего использования запуска сторонних процессов, наличия СУБД и дополнительных средств администрирования.
  • Протокол обмена обеспечивают вызовы функций (API) библиотек SQLite (библиотеки занимают чуть более 500кб. памяти), что не требует от программиста дополнительных знаний структуры БД и особенностей организации взаимодействия. Движок SQLite и интерфейс к ней реализованы в одной библиотеке.
  • От программиста на С#, работающего в Microsoft Visual Studio, не требуется дополнительных знаний по обеспечению обмена данными, обмен обеспечивается с использованием тех же компонент и функций языка.
  • Нет проблем с развертыванием и переносом базы данных с одного компьютера на другой. Сама база данных может поставляться вместе с приложением и копироваться другими пользователями в аналогичные программы.

  • И, все же, SQLite можно назвать встраиваемой реляционной базой данных:
    Прежде всего, она, как MySQL и PostgreSQL (сравнение ведем с небольшими базами данных), реализует основные возможности стандарта SQL 92 (включая триггеры и транзакции), и, по мнению многих, превосходит по возможностям PostgreSQL, а по скорости обработки данных превосходит обе указанные базы.
  • SQLite обеспечивает поддержку объема данных до 2-х терабайт, а размер записи (при использовании полей BLOB) ограничен только памятью компьютера.
  • Поддерживается небольшое, но вполне достаточное для большинства задач, количество типов данных.

  • Однако простота накладывает и ограничения. Приходится жертвовать отдельными характеристиками, характерными для больших баз данных, и, прежде всего, параллелизмом процессов, богатством встроенных библиотечных функций, все же небольшим ограничением стандарта языка SQL и некоторыми другими характеристиками. Но это не мешает все более широкому распространению SQLite для прикладных программы с небольшими базами данных, приложений, не требующих администрирования баз данных, для создания временной базы данных в процессе работы приложений, в качестве базы данных доступа и паролей на небольших Web порталах и для многих других целей.

    Параграф 1. Основы использования SQLite Для использования SQLite в программах на C#, можно использовать два подхода:
    1. Скачать соответствующие файлы библиотек провайдера, разместить их на своем компьютере и при формировании решения непосредственно использовать ссылки на данные библиотеки.
  • 2. Скачать и установить соответствующий провайдер, интегрируемый в Visual Studio и использовать контролы провайдера, как и все другие визуальные контролы среды.

  • Есть и платные, и бесплатные решения. Далеко не полный список инструментов и менеджеров - можно найти по этой ссылке на сайте sqlite.org. Здесь только отметим, что на сайте SQLite можно найти варианты файлов библиотек провайдеров на все случаи жизни.
    Managed Only - для приложений, которые должны работать в Windows и в Linux-based операционных системах.
  • Compact Framework - для работы в среде .NET CF для мобильных устройств под управлением Windows CE.
  • Itanium - для работы на процессорах Intel Itanium.
  • x64 - версия для платформ с архитектурой x64.
  • x86 - версия для платформ с архитектурой x86.

  • Соответственно выбранному подходу будет несколько отличаться и решение Windows приложения для работы с SQLite.

    Для первого подхода файлы библиотек можно найти по этой ссылке на официальном сайте SQlite - sqlite.org. Впрочем. для тех, кто будет рассматривать пример решения, приведенный ниже (Параграфы 2,3), это можно не делать. В конце параграфа 3 приложенном для скачивания, присутствуют все три необходимых нам файла для Windows, и, также, их можно скачать в процессе рассмотрения построения решения, в том месте, где речь пойдет об их включении в проект (Параграф 2).

    Для второго подхода в Internrt можно найти множество, но по большей части платных встраиваемых провайдеров. Один из неплохих бесплатных провайдеров "dotConnect for SQLite 3.30 Standard (Free)" я нашел на сайте http://www.devart.com, закладка Download. О его использовании будет вестись речь ниже (параграф 5.), но насколько долго он будет бесплатен, остается под вопросом. К тому же, он уступает, расположенному на сайте рядом с ним, провайдеру dotConnect for SQLite 3.30 Professional Trial(30 дней).

    Нам может понадобиться менеджер для работы с БД.

    Первый из известных - SQLite Designer. Хотя богатствами функциональных возможностей он далек от хороших менеджеров баз данных и можно обойтись и без него, но все же, он дает возможность использовать некоторые визуальные средства для работы с базами SQLite: построитель запросов (Query Builder), редактирование таблиц и ряд других возможностей. Его можно найти в интернете, в частности на сайте SourceForge (закладка Files).

    Другой, более крутой менеджер - SQLite Expert Professional, обладает большинством возможностей хороших менеджеров баз данных. Его также можно найти в интернете, в частности на сайте программы sqliteexpert.com. К сожалению, это Trial version со сроком знакомства в 30 дней, но и за 30 дней можно познакомиться и с типами данных, и с формированием SQL предложений для работы с базой, и со многими другими особенностями. Так что не поленитесь и установите у себя данный менеджер.

    Отметим также, что при использовании встраиваемых в Visual Studio провайдеров, появляется возможность доступа к БД из Server Explorer студии, и, в зависимости от провайдера, некоторые функции по манипулированию таблицами баз данных и составления запросов.

    Организацию взаимодействия с SQLite начнем с подробного рассмотрения его с использованием первого подхода. Далее - второй и третий параграфы посвящены созданию Windows приложений с использованием первого подхода, основанного на непосредственном использовании файлов библиотек провайдера без интеграции их в Visual Studio Net.

    Параграф 2. Подготовка демонстрационного решения

    Создадим простейшее Windows Application решение, как это показано в главе 1 "Простейший Windows Application проект". Я использовал Visual Studio 2010. В ней, при создании решения, все осталось, как и в предыдущих версиях студии, Меню "File/New Project". Далее выбираем, как показано на Рис.1. темплату и задаем имена. Обратите внимание на выделенное красным, Возможно, у Вас нет папки VS_2010(она будет создана) или нет диска D, тогда его следует заменить на C.

    Рис.1 Создание решения приложения

    На форму приложения поместим 6 кнопок, как показано на Рис.2.

    Рис.2 Решение приложения

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

    Функции для работы с SqLite будем оформлять, следуя моде, в классе "sqliteclass", для чего создадим этот класс, как показано на Рис.3. кликнув в Solution Explore на узле "sqlite" правой кнопкой мышки и выбрав пункты контекстного меню "Add" и "New Item".

    Рис.3 Добавление класса для работы с SQLite

    В появившемся окне коллекции темплат "Add New Item" выберем "Class", в поле "Name" введем имя класса - "sqliteclass.cs" и нажмем кнопочку "Add". Класс создан - Рис.4. Осталось заполнить его содержанием.

    Рис.4 Класса для размещения функций для работы с SQLite

    На данном этапе целесообразно нажать кнопочку "F5", выполнив решение, чтобы убедиться, что до данного момента код работоспособен.

    Наступил тот момент, когда мы должны включить в проект библиотеки провайдера SQLite. Для этого скачаем их или как рекомендовано выше с сайта SQLite, или вместе с проектом итогового решения в конце параграфа 3, или по этой ссылке с сайта. Распакуем архив, в последних двух случаях найдем папку SQLite3NET, поместите ее в общедоступное место, например в корень диска "С" (можно конечно поместить файлы из папки или саму папку туда, где Visual Studio хранит основные dll - у меня:
    C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\).

    PS: Чтобы узнать этот путь, в Solution Explorer дважды кликните в закладке "References" ссылку "System" (Рис.4.) - в окне "Object Browser" отобразится путь, где хранятся библиотеки.

    Кликаем правой кнопкой мышки на закладке References (Рис.4.), выбираем пункт контекстного меню "AddReference. ", в окне "AddReference" выбираем закладку "Browse", находим нашу распакованную папку SQLite3NET, и последовательно выбираем в проект библиотеки "SQLite.Net.dll" и "ExceptionHandler.dll" (Рис.5.).

    Рис.5 Добавление библиотек провайдера SQLite в решение

    Переходим на закладку sqliteclass решения, и добавляем пространство имен "Finisar.SQLite" и "System.Data" - они необходимы для работы с базай данных. using System.Data ;
    using Finisar.SQLite ;

    На этом этапе наше решение готово для создания и организации взаимодействия с БД SQLite. Для того, чтобы убедиться, что и на данном этапе все работоспособно, нажмем "F5".

    Параграф 3. Организация взаимодействия с SQLite 3.1 Приступая к взаимодействию с базой даннах

    Переходим на вкладку "Form1.cs" и добавляем переменные, которые нам понадобятся для работы, и, прежде всего, экземпляр класса "sqliteclass" - "mydb".

    Определимся, что базу данных будем создавать в директории приложения. Ее имя определим "mybd.db" (желательные расширения файла базы данных - это "db" или "db3", по крайней мере, менеджеры баз данных предлагают выбрать нам именно файл баз данных с этими расширениям, но расширение, в принципе, не играет роли). Кроме того, нам понадобится путь, где находится "exe" файл приложения и полный путь к файлу базы данных - переменная "sPath". Перейдем на вкладку "Form1.cs.[Design]" и дважды кликнем по заголовку окна решения. Будет создан обработчик загрузки формы приложения "Form1_Load", в нем и определим "sPath" (в C# есть множество способов определения того, где находится "exe" файл, это один из многих).

    3.2. Класс для работы с базой данных Мы знаем, что SQL операторы можно подразделить на два основных типа:
    Не возвращающие значения из базы данных (в лучшем случае возвращающие число записей, которые затронуло их выполнение - "Insert", "Delete", "Update").
  • Возвращающие запрошенную информацию из таблиц баз данных.

  • Поэтому в нашем классе создадим две функции для этих случаев, соответственно iExecuteNonQuery и drExecute. Первая будет возвращать число затронутых ею записей, вторая массив выбранных строк DataRow. Поскольку, функции практически не отличаются по организации работы с БД от рассматриваемых нами в разделе "Работа с базами данных в Visual Studio" книги, размещенной на данном сайте, то здесь приведем класс полностью и рассмотрим его функции:

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

    Итак, отличие от работы с другими базами данных - это наличие нескольких собственных невизуальных контролов. Первый, это свой коннектор - "SQLiteConnection", второй - собственный провайдер команд - "SQLiteCommand", и третий - свой адаптер данных, "SQLiteDataAdapter". Других контролов, отличных от MS SQL и Oracle не требуется.

    "ConnectionString" требует указания полного пути к БД. Сами процессы связи с БД также стандартные. Обратим внимание на параметр "New", равный "True" или "False", который, как ясно по контексту, при значении "True", создает новою базу данных, а при значении "False" - нет. Причем, его значение приоритетнее "if not exists" в SQL операторе "CREATE TABLE if not exists. "

    Перейдем к рассмотрению кода:

    3.3 Создание базы данных

    Будем создавать базу данных "mybd.db", путь к файлу которой мы определили в переменной "sPath". В базе данных создадим таблицу "birthday" со значениями полей "ФИО", "Даты рождения" и "отметки о поздравлении в данном году":

    Если мы запустим на данном этапе решение на выполнение, то получим необрабатываемое исключение. Причина в том, что для работы с SQLite все файлы библиотек провайдера должны лежать где и "exe" файл приложения - в ссборке . Скопируем три файла из C:\SQLite3NET\ в D:\VS_2010\sqlite\bin\Debug\ (тоже придется сделать, когда мы будем компилировать приложение в "Release", скопировав файлы в. \bin\Release).

    PS: Те ссылки, библиотеки которых необходимы в сборке приложения, можно копировать в сборку автоматически. Для этогов Solutation Explorer надо выбрать окно "Properties" ссылки и установить свойство "Copy Local" в "True".

    Запустим приложение на выполнение, нажмем кнопочку "Create" и убедимся, что база данных создана (D:\VS_2010\sqlite\bin\Debug\mybd.db).

    Отметим, что ни при создании базы, ни при создании таблицы, sqlCommand.ExecuteNonQuery ничего не возвращает, вернее возвращает "0". Поэтому надо как-то проверить то, что мы создали. Я делаю это так (продолжаем код, приведенный выше):

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

    3.4 Работа с базой данных

    Работа с базой данных заключается в использовании функций класса для чтения и записи.

    Работа с базой данных показана на Рис.6.

    Рис.6 Работа с базой данных SQLite

    3.5 Скачать решение приложения Параграф 4. Типы данных SQLite

    Наиболее удобно посмотреть типы данных SQLite в менеджере SQLite Expert Professional, о котором мы говорили в параграфе 1 (Рис.7.). Для этого нажмем кнопку "New Table", введем имя таблицы и нажмем кнопку "Add", в окне "New Field" в выпадающем списке можем посмотреть все возможные на данный момент типы данных.

    Рис.7 Типы данных SQLite

    Однако не все так прекрасно как может показаться. Мы действительно можем при создании таблицы задать показанные выше типы, но это, в большинстве своем, так называемые аффинированные типы. или типы, которые провайдер приведет к одному из следующих типов хранения:
    NULL. Пустое значение в таблице базы.
  • INTEGER. Целочисленное значение, хранящееся в 1, 2, 3, 4, 6 или 8 байтах, в зависимости от величины самого значения.
  • REAL. Числовое значение с плавающей точкой. Хранится в формате 8-байтного числа IEEE с плавающей точкой.
  • TEXT. Значение строки текста. Хранится с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE).
  • BLOB. Значение бинарных данных, хранящихся точно в том же виде, в каком были введены.

  • Подробно о типах данных можно посмотреть на сайте xBB - полезности для вебмастеров и не только (см. раздел сайта "Избранные доки" - "Типы данных SQLite"). Приведем с сайта правила аффинированности столбца по объявлению типа столбца и приведенную на сайте таблицу преобразования объявленных данных в аффинированные типы в соответствии с пятью правилами:
    1. Если объявление типа содержит строку "INT", то столбец ассоциируется с аффинированным INTEGER.
  • 2. Если объявление типа столбца содержит любую из строк "CHAR", "CLOB", или "TEXT", то аффинированность определяется как TEXT. Обратите внимание, что тип VARCHAR содержит подстроку "CHAR", и поэтому ему тоже сопоставляется аффинированный TEXT.
  • 3. Если объявление типа столбца содержит строку "BLOB" или если тип не указан, то столбец аффинируется с NONE.
  • 4. Если объявление типа столбца содержит любую из строк "REAL", "FLOA" или "DOUB", аффинированность определяется как REAL.
  • 5. В остальных случаях столбцу сопоставляется аффинированный NUMERIC.

  • Примеры названий типов из запросов CREATE TABLE или выражения CAST

    Правило, использованное для определения аффинированности

    Полезно также посмотреть документацию по SQLite и, в частности, на сайте sb-money.ru и конечно на сайте SQLlite.

    Параграф 5. Использование встроенных в Visual Studio провайдеров SQLite

    Как говорилось в параграфе 1, неплохой встраиваемый в Visual Studio бесплатный провайдер "dotConnect for SQLite 3.30 Standard (Free)" можно найти на сайте http://www.devart.com, закладка Download.

    Скачаем его и установим на машину, предварительно закрыв все Visual Studio Net.

    В аннотации к провайдеру сказано:

    Убедимся в этом. Откроем проект, который мы скачали (создали) в конце параграфа 3, удалим все ссылки в "Solution Explorer" в закладке "References" на SQLite, а также пространство имен в "sqliteclass.cs":

    Выберем Toolbox (меню "View", "Toolbox") и увидим новую закладку "SQLiteData" (Рис.8.).

    Рис.8. Встроенный провайдер SQLite

    Перенесем в проект любой из контролов со вкладки "SQLiteData", например контрол "SQLiteConnection". Убедимся, что в "Solution Explorer", в закладке "References", появились новые библиотеки (Рис.8.):

    Добавим в класс "sqlclass.cs" пространства имен:

    Определимся на данном этапе, будем мы использовать стандартные контролы или нет. Я не сторонник использования стандартных контролов. Без них мы можем построить более гибкие приложения. Поэтому, удалим из проекта контрол "sqLiteConnection1" (на закладке "References" в Solution Explorer, при внесении контрола в проект библиотеки были добавлены, при удалении - они остаются). Значит, мы можем продолжить работу над проектом.

    Изменим немного наш класс "sqliteclass.cs": using Devart.Data;
    using Devart.Data.SQLite ;

    Вот и все изменения в проекте решения. Выполним решение и убедимся, что приложение работает как и ранее (Рис.6.).

    Параграф 6. О работе с ошибками

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

    Единственное, что мы можем, это объявить в классе "sqlliteclass" переменные и функции возврата ошибок, например так:

    И соответственно в функциях класса добавить код:

    Анализ ощибки выполнять уже в коде обращения к классу, после вызова данных функций.

    Можно в try-catch предусмотреть и ведение журнала ошибок, добавив, например такую функцию:

    Параграф 7. Работа с Blob типами или как хранить фото 7.1 Решение приложения

    Создадим новый проект решения с именем "sqlite1". Будем использовать шаги создания проекта, по методике показанной выше. Поместим на форму 6 контролов Button, 2 контрола PictureBox и один контрол OpenFileDialog. Также создадим класс "sqliteclass" (Рис.9.). Класс можно взять из предыдущего проекта, скопировав его в наш проект, добавив в решение(Solution Explorer, узел "sqlite1", контекстное меню узла, "Add", "Existing Item") и переименовав пространство имен:
    namespace sqlite1

    Обратим внимание, что для работы с SQLite мы используем встроенный в Visual Studio провайдер и подход, описанный нами в параграфе 5. Как мы убедились - это не является принципиальным, мы переделывали проект подхода от использования соответствующих файлов библиотек провайдера к использованию встроенного в Visual Studio провайдера, Вы можете без труда, в качестве тренировки, после прочтения этого параграфа, проделать обратное преобразование.

    Рис.9. Проект решения

    Поставим задачу: нам необходимо хранить файлы фотографий в некоторой базе SQLite, причем, для простоты, ничего, кроме фотографий, в этой базе храниться не будет (только номер фотографии и само фото).

    Начнем с кнопки 1 - создание базы данных.

    Здесь ничего нового, даже функцию iExecuteNonQuery мы использовали из класса "sqliteclass" прошлого решения. Вы можете скопировать все функции в класс "sqliteclass" из прошлого решения, если не воспользовались советом о копировании класса.

    Обратим внимание, что при создании таблицы базы данных, мы намеренно отказались от опции "AUTOINCREMENT" - причина, метод записи, который мы будем рассматривать следующим, не очень дружит с этим предложением.

    Далее выбираем фотографию, которую будем записывать в БД и помещаем ее в pictureBox1.

    Помимо отображения записываемой фотографии мы поместили байты файла фото в байтовый массив "data", используя MemoryStream и его метод ToArray().

    Далее рассмотрим возможности использование SQLiteDataAdapter и возможности SQL предложений с параметрами для записи в БД, и в частности, записи Blob типов данных.

    7.2 Возможности использование SQLiteDataAdapter для записи BLOB данных

    Введем в наш класс две функции. Задача первой будет "изучить" схему таблицы базы данных и возвратить ее в DataTable.

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

    Эти две функции используются комплексно. При обращении к первой функции мы получаем объект DataTable, содержащий схему базы данных. Иначе, мы можем добавить строку таблицы базы данных в объект, как будто мы ее добавили в таблицу базы данных. Далее, после добавления строки, вызывается вторая функция, которая используя объекты SQLiteDataAdapter и SQLiteCommandBuilder, проводит изменение в таблице базы данных.

    На стороне клиента осталось заполнить строку DataTable:

    7.3 Возможности использования SQL предложений с параметрами для записи BLOB данных

    Приведенная ниже функция, которая была добавлена в класс, не претендует на универсальность, но позволяет записать в поле Blob байты изображения. Почему это приходится делать через параметры, а не преобразовать массив в строку? Дело в том, что байты изображения могут содержать нулевой символ, что воспринимается как конец строки и единственная возможность непосредственно указать адаптеру о необходимости воспринимать то, что передается в массиве байт, как сплошной поток бит - "SQLiteType.Blob".

    Соответственно, использование данной функции, будет выглядеть примерно так:

    Далее рассмотрим два способа чтения Blob поля из базы данных, с использованием SQLiteDataAdapter и SQLiteDataReader.

    7.4 Чтение Blob данных с использованием SQLiteDataAdapter

    Это наиболее простой способ, основанный на том, что прочитанные в DataTable столбцы таблицы мы можем интерпретировать как любой тип данных, используя средства языка C#:

    7.5 Чтение данных с использованием SQLiteDataReader

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

    7.6 Функция ExecuteScalar

    И последнее, что мы использовали, это функция oExecuteScalar, возвращающая единичное значение столбца или агрегат из БД.

    Выполнение решения показано на Рис.10.

    Рис.10 Работа с Blob данными в SQLite

    Вместо заключения или скачать решение для работы с Blob типами данных

    Решение для скачивания приложения, работающего с Blob данными, не приводится намеренно. Причина тому, что автор не уверен в том, что большинство скачали и установили встраиваемый провайдер SQLite для Visual Studio (это часто помогает предотвратить обилие вопросов типа:"А почему у меня Ваш проект не заработал?" - есть много кто сначала скачивает, а потом читает - что же он скачал). К тому же, как уже было сказано, решение для скачивания, приведенное в параграфе 3, легко адаптируется и для работы с Blob данными, достаточно лишь внести в него приведенные в параграфе 7 функции.

    Литература

    Молчанов Владислав 25.05.2011г. параграф 7 добавлен 30.5 2011г.