Модуль работы с БД: различия между версиями
Sidminik (обсуждение | вклад) |
Sidminik (обсуждение | вклад) |
||
| Строка 84: | Строка 84: | ||
===<code>client.requireFromDatabase()</code>=== | ===<code>client.requireFromDatabase()</code>=== | ||
Выполняет запрос и срабатывает как require(), но код модуля получает из БД. В основном используется в планировщике. | Выполняет запрос и срабатывает как <code>require()</code>, но код модуля получает из БД. В основном используется в планировщике. | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
requireFromDatabase(name: string): Promise<any> | requireFromDatabase(name: string): Promise<any> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Текущая версия от 05:35, 30 декабря 2025
Общие сведения
[править]Принцип работы: модуль подключается к БД по connectionString из реестра Windows. Большинство операций асинхронные.
Модуль поддерживает работу с СУБД: Access, MS SQL, Oracle и Postgres SQL:
- для подключения к Access и к Postres используется модуль
@chemsoft/odbc; - для подключения к MS SQL используется модуль
mssql/msnodesqlv8; - для подключения к Oracle используется модуль
@chemsoft/oracledb.
Начало работы
[править]Можно запросить клиент для необходимой СУБД вручную:
const {AccessClient, MssqlClient, OracleClient} = require('@chemsoft/db')
const access = new AccessClient(`connection string`)
const mssql = new MssqlClient(`connection string`)
const oracle = new OracleClient(`connection string`)
const oracle = new PostgresClient(`connection string`)
Можно в полностью автоматическом режиме получить клиент для нужной СУБД, получая при этом универсальное решение для любой БД:
const { getChemicClient } = require('@chemsoft/db')
const client = getChemicClient()
Такой трюк работает, благодаря общему интерфейсу.
client.connect()
[править]Производит подключение к БД. Почему не реализовано в конструкторе? Для того, чтобы реализовать ленивый запрос зависимостей, таким образом, подключены будут только используемые в текущий момент пакеты для подключения к БД.
async connect(): Promise<void>
client.disconnect()
[править]Производит отключение от БД в явном виде, таким образом не будет создаваться лишних соединений с БД, на одного пользователя будет только одно подключение. Необходимо вызвать в конце потока исполнения скрипта.
async disconnect(): Promise<void>
client.execute()
[править]Выполняет запрос. В зависимости от типа БД ответ может различаться.
IExecuteResult это интерфейс для максимально общего описания возвращаемых значений. Содержит массив записей и метаданные.
interface IExecuteResult {
records: Array<{ [columnName: string]: any }>;
meta: {
rowsAffected?: number;
}
}
Тип получаемых параметров:
type QueryParameter = null |
number |
boolean |
string |
Date |
{ type: 'date' | 'time'; value: Date }
query: string текст SQL запроса parameters?: QueryParameter[] массив параметров запроса, в тексте запроса можно ставить символ ?, на его место будет подставляться правильно отформатированный параметр
execute(query: string, parameters?: QueryParameter[]): Promise<IExecuteResult>
client.executeScalar()
[править]Выполняет запрос и возвращает одно скалярное значение (даже если может быть возвращено несколько колонок). Если возвращено несколько записей и колонок, то возвращает данные из первой записи и первой колонки.
query: string текст SQL запроса parameters?: QueryParameter[] массив параметров запроса, в тексте запроса можно ставить символ ?, на его место будет подставляться правильно отформатированный параметр
executeScalar(query: string, parameters?: QueryParameter[]): Promise<any>
client.requireFromDatabase()
[править]Выполняет запрос и срабатывает как require(), но код модуля получает из БД. В основном используется в планировщике.
requireFromDatabase(name: string): Promise<any>