Модуль работы с БД: различия между версиями
Sidminik (обсуждение | вклад) |
Sidminik (обсуждение | вклад) |
||
| (не показано 5 промежуточных версий этого же участника) | |||
| Строка 32: | Строка 32: | ||
Производит подключение к БД. Почему не реализовано в конструкторе? Для того, чтобы реализовать ленивый запрос зависимостей, таким образом, подключены будут только используемые в текущий момент пакеты для подключения к БД. | Производит подключение к БД. Почему не реализовано в конструкторе? Для того, чтобы реализовать ленивый запрос зависимостей, таким образом, подключены будут только используемые в текущий момент пакеты для подключения к БД. | ||
<syntaxhighlight lang="javascript"> | |||
async connect(): Promise<void> | async connect(): Promise<void> | ||
</syntaxhighlight> | |||
===<code>client.disconnect()</code>=== | ===<code>client.disconnect()</code>=== | ||
Производит отключение от БД в явном виде, таким образом не будет создаваться лишних соединений с БД, на одного пользователя будет только одно подключение. Необходимо вызвать в конце потока исполнения скрипта. | Производит отключение от БД в явном виде, таким образом не будет создаваться лишних соединений с БД, на одного пользователя будет только одно подключение. Необходимо вызвать в конце потока исполнения скрипта. | ||
<syntaxhighlight lang="javascript"> | |||
async disconnect(): Promise<void> | async disconnect(): Promise<void> | ||
</syntaxhighlight> | |||
===<code>client.execute()</code>=== | ===<code>client.execute()</code>=== | ||
Выполняет запрос. В зависимости от типа БД ответ может различаться. | Выполняет запрос. В зависимости от типа БД ответ может различаться. | ||
IExecuteResult это интерфейс для максимально общего описания возвращаемых значений. Содержит массив записей и метаданные. | <code>IExecuteResult</code> это интерфейс для максимально общего описания возвращаемых значений. Содержит массив записей и метаданные. | ||
<syntaxhighlight lang="javascript"> | |||
interface IExecuteResult { | interface IExecuteResult { | ||
records: Array<{ [columnName: string]: any }>; | records: Array<{ [columnName: string]: any }>; | ||
| Строка 51: | Строка 55: | ||
} | } | ||
} | } | ||
</syntaxhighlight> | |||
Тип получаемых параметров: | Тип получаемых параметров: | ||
<syntaxhighlight lang="javascript"> | |||
type QueryParameter = null | | type QueryParameter = null | | ||
number | | number | | ||
| Строка 59: | Строка 66: | ||
Date | | Date | | ||
{ type: 'date' | 'time'; value: Date } | { type: 'date' | 'time'; value: Date } | ||
</syntaxhighlight> | |||
<code>query: string</code> текст SQL запроса <code>parameters?: QueryParameter[]</code> массив параметров запроса, в тексте запроса можно ставить символ <code>?</code>, на его место будет подставляться правильно отформатированный параметр | |||
<syntaxhighlight lang="javascript"> | |||
execute(query: string, parameters?: QueryParameter[]): Promise<IExecuteResult> | execute(query: string, parameters?: QueryParameter[]): Promise<IExecuteResult> | ||
</syntaxhighlight> | |||
===<code>client.executeScalar()</code>=== | ===<code>client.executeScalar()</code>=== | ||
Выполняет запрос и возвращает одно скалярное значение (даже если может быть возвращено несколько колонок). Если возвращено несколько записей и колонок, то возвращает данные из первой записи и первой колонки. | Выполняет запрос и возвращает одно скалярное значение (даже если может быть возвращено несколько колонок). Если возвращено несколько записей и колонок, то возвращает данные из первой записи и первой колонки. | ||
query: string текст SQL запроса parameters?: QueryParameter[] массив параметров запроса, в тексте запроса можно ставить символ ?, на его место будет подставляться правильно отформатированный параметр | <code>query: string</code> текст SQL запроса <code>parameters?: QueryParameter[]</code> массив параметров запроса, в тексте запроса можно ставить символ <code>?</code>, на его место будет подставляться правильно отформатированный параметр | ||
<syntaxhighlight lang="javascript"> | |||
executeScalar(query: string, parameters?: QueryParameter[]): Promise<any> | executeScalar(query: string, parameters?: QueryParameter[]): Promise<any> | ||
</syntaxhighlight> | |||
===<code>client.requireFromDatabase()</code>=== | ===<code>client.requireFromDatabase()</code>=== | ||
Выполняет запрос и срабатывает как require(), но код модуля получает из БД. В основном используется в планировщике. | Выполняет запрос и срабатывает как <code>require()</code>, но код модуля получает из БД. В основном используется в планировщике. | ||
<syntaxhighlight lang="javascript"> | |||
requireFromDatabase(name: string): Promise<any> | requireFromDatabase(name: string): Promise<any> | ||
</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>