<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html class="client-nojs" dir="ltr" lang="en">
<head>
<meta charset="UTF-8" />
<title>Модули/SQLite - OpenSCADAWiki</title>
<meta content="MediaWiki 1.26.4" name="generator" />
<link href="https://www.gnu.org/copyleft/fdl.html" rel="copyright" />
<link href="../../en/files/doc.css" rel="stylesheet" /></head>
<body><div class="floatright"><a href="../index.html"><img alt="OpenSCADA" src="../../en/files/index.png" /></a></div><div id="mw_header">
			<div class="mw-indicators">
</div>
			<h1 id="firstHeading" lang="ru">Модули/SQLite</h1>
		</div><div class="mw-content-ltr" dir="ltr" id="mw-content-text" lang="ru"><div class="mw-pt-translate-header noprint" dir="ltr" lang="en">This page is a <span class="plainlinks"><a class="external text" href="http://oscada.org/wiki/index.php?title=Special:Translate&amp;group=page-Modules%2FSQLite&amp;action=page&amp;filter=&amp;language=ru" rel="nofollow noreferrer noopener" target="_blank">translated version</a></span> of the page <a class="external" href="http://oscada.org/wiki/Modules/SQLite" title="Modules/SQLite">Modules/SQLite</a> and the translation is 100% complete.</div><hr /><div class="mw-pt-languages" dir="ltr" lang="en"><div class="mw-pt-languages-list autonym"><a class="mw-pt-languages-ui mw-pt-progress mw-pt-progress--complete" href="../../en/Modules/SQLite.html" title="Modules/SQLite (100% translated)">English</a>&nbsp;• ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete">mRussian</span>&nbsp;• ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../../uk/Modules/SQLite.html" title="Модулі/SQLite (100% translated)">Українська</a></div></div>
<table class="wikitable">

<tr>
<th> Модуль </th>
<th> Имя </th>
<th> Версия </th>
<th> Лицензия </th>
<th> Источник </th>
<th> Языки </th>
<th> Платформы </th>
<th> Тип </th>
<th> Автор </th>
<th> Описание
</th></tr>

<tr>
<td> <a href="../Modules/SQLite.html" title="Special:MyLanguage/Modules/SQLite">SQLite</a> </td>
<td> БД SQLite
<ul><li> <b><a href="../Program_manual.html#DBFeat" title="Special:MyLanguage/Documents/Program manual">Свойства</a>:</b> SQL, LIST, STRUCT, GET, SEEK, PRELOAD, SET, DEL, FIX, TR, ERR</li></ul>
</td>
<td> 4.0 </td>
<td> GPL2 </td>
<td> bd_SQLite.so </td>
<td> en,uk,ru,de </td>
<td> x86,x86_64,ARM
</td>
<td> БД </td>
<td> Роман Савоченко </td>
<td> Модуль БД. Предоставляет поддержку БД SQLite.
</td></tr></table>
<p>Модуль предоставляет в OpenSCADA поддержку БД SQLite. БД SQLite является небольшой и встраиваемой БД, поддерживающей SQL-запросы. БД SQLite распространяется под свободной лицензии. Ознакомиться с БД можно на сайте БД — <a class="external free" href="http://sqlite.org" rel="nofollow noreferrer noopener" target="_blank">http://sqlite.org</a>. Модуль основан на библиотеке API производителя БД языка "C". Модуль позволяет выполнять действия над базами данных, таблицами и содержимым таблиц.
</p><p>Модуль на данный момент поддерживает конкурентную работу с совместными файлами БД, вроде библиотек, из различных процессов OpenSCADA, путём корректной обработки блокирования файлов. Т.е. вы будете получать предупреждения пока файл будет оставаться заблокированным, и сможете удачно записать в него как только он будет освобождён закрытием транзакции блокирующим процессом.
</p>
<div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.BD.D0.B0.D0.B4_.D0.91.D0.94"><span class="tocnumber">1</span> <span class="toctext">Операции над БД</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.BD.D0.B0.D0.B4_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D0.B5.D0.B9"><span class="tocnumber">2</span> <span class="toctext">Операции над таблицей</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.BD.D0.B0.D0.B4_.D1.81.D0.BE.D0.B4.D0.B5.D1.80.D0.B6.D0.B8.D0.BC.D1.8B.D0.BC_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D1.8B"><span class="tocnumber">3</span> <span class="toctext">Операции над содержимым таблицы</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#.D0.9F.D1.80.D0.B0.D0.B2.D0.B0_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D0.B0"><span class="tocnumber">4</span> <span class="toctext">Права доступа</span></a></li>
<li class="toclevel-1 tocsection-5"><a href="#.D0.9F.D1.80.D0.BE.D0.B8.D0.B7.D0.B2.D0.BE.D0.B4.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D1.8C_.D0.91.D0.94"><span class="tocnumber">5</span> <span class="toctext"><span>Производительность БД</span></span></a></li>
</ul>
</div>

<h2><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.BD.D0.B0.D0.B4_.D0.91.D0.94"><span class="mw-headline-number">1</span> Операции над БД</span></h2>
<p>Поддерживаются операции открытия и закрытия БД, с возможностью создания новой БД при открытии и удаления существующей при закрытии. В терминах подсистемы "БД" OpenSCADA, открытием БД является её регистрация для последующего использования программой. Также, поддерживается операция запроса перечня таблиц в БД.
</p><p>БД SQLite адресуется путём указания имени файла БД в формате: "<b>{FileDBPath}</b>". Где:
</p>
<ul><li> <i>FileDBPath</i> — полный путь к файлу БД (./oscada/Main.db).</li></ul>
<dl><dd>Используйте пустой путь для создания временной базы данных на диске.</dd>
<dd>Используйте ":memory:" для создания временной базы данных в памяти.</dd></dl>
<h2><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.BD.D0.B0.D0.B4_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D0.B5.D0.B9"><span class="mw-headline-number">2</span> Операции над таблицей</span></h2>
<p>Поддерживаются операции открытия, закрытия таблицы, с возможностью создания новой таблицы при открытии и удаления существующей при закрытии, а также запрос структуры таблицы.
</p>
<h2><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.BD.D0.B0.D0.B4_.D1.81.D0.BE.D0.B4.D0.B5.D1.80.D0.B6.D0.B8.D0.BC.D1.8B.D0.BC_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D1.8B"><span class="mw-headline-number">3</span> Операции над содержимым таблицы</span></h2>
<ul><li> сканирование записей таблицы;</li>
<li> запрос значений указанных записей;</li>
<li> установка значений указанных записей;</li>
<li> удаление записей.</li></ul>
<p>API подсистемы "БД" предполагает доступ к содержимому таблицы по значению ключевого(ых) полей. Так, операция запроса записи подразумевает предварительную установку ключевых колонок объекта TConfig, по которым будет выполнен запрос. Создание новой записи(строки) производится операцией установки значений записи, которая отсутствует.
</p><p>Модуль позволяет динамически менять структуру таблиц БД SQLite, путём создания новой БД с требуемой структурой и копирования в неё данных из старой. Так, в случае несоответствия структуры таблицы и структуры устанавливаемой записи, структура таблицы будет приведена к требуемой структуре записи. В случае запроса значений записи и несоответствия структур записи и таблицы, будут получены только значения общих элементов записи и таблицы. Модуль не отслеживает порядка расположения элементов записи и структуры таблицы!
</p><p>Модулем реализуется механизм поддержки многоязыковых текстовых переменных. Для полей с многоязыковой текстовой переменной создаются колонки отдельных языков в формате "<b>{lang}#{FldID}</b>" (en#NAME). При этом, базовая колонка содержит значение для базового языка. Колонки отдельных языков создаются по надобности, в момент сохранения в БД и при исполнении OpenSCADA в соответствующей локали. В случае отсутствия значения для конкретного языка будет использоваться значений для базового языка.
</p><p>Типы элементов БД SQLite следующим образом соответствуют типам элементов OpenSCADA:
</p>
<table class="wikitable">

<tr>
<th> Типы полей OpenSCADA </th>
<th> Типы полей БД SQLite
</th></tr>
<tr>
<td> TFld::String </td>
<td> TEXT
</td></tr>
<tr>
<td> TFld::Integer, TFld::Boolean </td>
<td> INTEGER
</td></tr>
<tr>
<td> TFld::Real </td>
<td> DOUBLE
</td></tr></table>
<h2><span class="mw-headline" id=".D0.9F.D1.80.D0.B0.D0.B2.D0.B0_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D0.B0"><span class="mw-headline-number">4</span> Права доступа</span></h2>
<p>Права доступа к БД определяются правами доступа к отдельно взятому файлу БД. Модулем поддерживается работа с файлами БД SQLite в режиме только для чтения, например, в демонстрациях.
</p>
<h2><span class="mw-headline" id=".D0.9F.D1.80.D0.BE.D0.B8.D0.B7.D0.B2.D0.BE.D0.B4.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D1.8C_.D0.91.D0.94"><span class="mw-headline-number">5</span> <span id="Tests" title="#Tests">Производительность БД</span></span></h2>
<p>Измерение производительности БД выполнялся тестом "БД" модуля "SystemTests", путём выполнения операций над записями структурой: "<b>name char (20), descr char (50), val double (10.2), id int (7), stat bool, reqKey string, reqVal string</b>".
</p>
<table class="wikitable">

<tr>
<th> Operations for 1000 records, seconds </th>
<th> Nokia N800, SD 4GClass6<br />Nokia N900 </th>
<th> RPi2 Debian8 Class10 UHS1;<br />RPi3 Debian8 Class10 UHS1;<br />OrangePiZero Debian8 Class2 </th>
<th> AMD Turion L625 1.6, 2G [HDD; SSD]<br />Intel(R) Core(TM) i3 CPU 1.33GHz, 3G [HDD; SSD];<br />Intel(R) Core(TM) i7 CPU 2.6GHz, 12G FastSSD
</th></tr>
<tr>
<td> <i>Creating:</i> </td>
<td> 3.3; 1.96 </td>
<td> 0.78; 0.43; 0.48 </td>
<td> [0.49; 0.2]; [0.39; 0.22]; 0.056
</td></tr>
<tr>
<td> <i>Updating:</i> </td>
<td> 3.2; 2.47 </td>
<td> 0.7; 0.41; 0.45 </td>
<td> [0.48; 0.19]; [0.40; 0.21]; 0.053
</td></tr>
<tr>
<td> <i>Getting:</i> </td>
<td> 2.6; 1.81 </td>
<td> 0.69; 0.38; 0.45 </td>
<td> [0.36; 0.19]; [0.31; 0.21]; 0.051
</td></tr>
<tr>
<td> <i>Seeking:</i> </td>
<td> 3.1; 1.48 </td>
<td> 0.76; 0.42; 0.51 </td>
<td> [-; 0.22]; [0.21; 0.22]; 0.052
</td></tr>
<tr>
<td> <i>Seeking in preload:</i> </td>
<td> 0.53; 0.29 </td>
<td> 0.13; 0.071; 0.088 </td>
<td> [-; 0.028]; [0.027; 0.028]; 0.0073
</td></tr>
<tr>
<td> <i>Deleting:</i> </td>
<td> 1.18; 0.43 </td>
<td> 0.20; 0.10; 0.13 </td>
<td> [0.08; 0.058]; [0.067; 0.069]; 0.012
</td></tr></table>






</div><table style="border-top: dotted 2px #999999; margin-top: 20pt; color: gray;" width="100%"><tr><td style="text-align: left;" width="40%"><a href="http://oscada.org/wiki/Modules/SQLite/ru">Modules/SQLite/ru</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">April 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3018</td></tr></table></body>
</html>