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

Модуль работы с БД: различия между версиями

Материал из wiki.chemsoft.ru
Строка 39: Строка 39:
Производит отключение от БД в явном виде, таким образом не будет создаваться лишних соединений с БД, на одного пользователя будет только одно подключение. Необходимо вызвать в конце потока исполнения скрипта.
Производит отключение от БД в явном виде, таким образом не будет создаваться лишних соединений с БД, на одного пользователя будет только одно подключение. Необходимо вызвать в конце потока исполнения скрипта.


<syntaxhighlight lang="javascript">
async disconnect(): Promise<void>
async disconnect(): Promise<void>
</syntaxhighlight>


===<code>client.execute()</code>===
===<code>client.execute()</code>===
Строка 46: Строка 48:
IExecuteResult это интерфейс для максимально общего описания возвращаемых значений. Содержит массив записей и метаданные.
IExecuteResult это интерфейс для максимально общего описания возвращаемых значений. Содержит массив записей и метаданные.


 
<syntaxhighlight lang="javascript">
interface IExecuteResult {
interface IExecuteResult {
   records: Array<{ [columnName: string]: any }>;
   records: Array<{ [columnName: string]: any }>;
Строка 53: Строка 55:
   }
   }
}
}
</syntaxhighlight>
Тип получаемых параметров:
Тип получаемых параметров:


<syntaxhighlight lang="javascript">
type QueryParameter = null |
type QueryParameter = null |
                       number |
                       number |
Строка 61: Строка 66:
                       Date |
                       Date |
                       { type: 'date' | 'time'; value: Date }
                       { type: 'date' | 'time'; value: Date }
</syntaxhighlight>
query: string текст SQL запроса parameters?: QueryParameter[] массив параметров запроса, в тексте запроса можно ставить символ ?, на его место будет подставляться правильно отформатированный параметр
query: string текст SQL запроса parameters?: QueryParameter[] массив параметров запроса, в тексте запроса можно ставить символ ?, на его место будет подставляться правильно отформатированный параметр


Строка 69: Строка 76:
Выполняет запрос и возвращает одно скалярное значение (даже если может быть возвращено несколько колонок). Если возвращено несколько записей и колонок, то возвращает данные из первой записи и первой колонки.
Выполняет запрос и возвращает одно скалярное значение (даже если может быть возвращено несколько колонок). Если возвращено несколько записей и колонок, то возвращает данные из первой записи и первой колонки.


<syntaxhighlight lang="javascript">
query: string текст SQL запроса parameters?: QueryParameter[] массив параметров запроса, в тексте запроса можно ставить символ ?, на его место будет подставляться правильно отформатированный параметр
query: string текст SQL запроса parameters?: QueryParameter[] массив параметров запроса, в тексте запроса можно ставить символ ?, на его место будет подставляться правильно отформатированный параметр




executeScalar(query: string, parameters?: QueryParameter[]): Promise<any>
executeScalar(query: string, parameters?: QueryParameter[]): Promise<any>
</syntaxhighlight>


===<code>client.requireFromDatabase()</code>===
===<code>client.requireFromDatabase()</code>===
Выполняет запрос и срабатывает как require(), но код модуля получает из БД. В основном используется в планировщике.
Выполняет запрос и срабатывает как require(), но код модуля получает из БД. В основном используется в планировщике.


 
<syntaxhighlight lang="javascript">
requireFromDatabase(name: string): Promise<any>
requireFromDatabase(name: string): Promise<any>
</syntaxhighlight>

Версия от 05:32, 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>