кодесурса
«node.js

Node.js SQLite3

script1adsense2code
script1adsense3code

Вступление

Это драйвер node.js (асинхронные, неблокирующие привязки SQLite3) для sqlite3. Он написан на JavaScript, не требует компиляции. Он предоставляет все наиболее все соединения / запросы из SQLit3. Это, вероятно, один из лучших модулей, используемых для работы с базой данных SQLite3, и этот модуль активно поддерживается.

Мы предполагаем, что вы уже установили SQLite3 и node.js в среде Windows или Linux.

Вот пример для извлечения имен (имя, фамилия) из таблицы «сотрудники» принадлежит базе данных « hr »:

Примечание: модуль должен быть установлен перед использованием.


var sqlite3 = require('sqlite3').verbose();
var file ="hr";
var db = new sqlite3.Database(file);
db.all("SELECT first_name,last_name FROM employees", function(err, rows) {
        rows.forEach(function (row) {
            console.log(row.first_name, row.last_name);
        })
	});	
db.close();

Выход :

 E: / nodejs> узел test.js
Стивен Кинг
Нина Кочхар
Лекс Де Хаан
Александр Хунольд
Брюс Эрнст
Дэвид Остин
Валли Патабалла
Диана Лоренц
Нэнси Гринберг
Даниэль Фавиет
--------------
--------------

Еще один пример создания новой базы данных, таблицы, вставки и получения записей:


var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('abcd');
db.serialize(function() {
  db.run("CREATE TABLE user (id INT, dt TEXT)");
  var stmt = db.prepare("INSERT INTO user VALUES (?,?)");
  for (var i = 0; i < 10; i++) {
  
  var d = new Date();
  var n = d.toLocaleTimeString();
  stmt.run(i, n);
  }
  stmt.finalize();
  db.each("SELECT id, dt FROM user", function(err, row) {
      console.log("User id : "+row.id, row.dt);
  });
});
db.close();

Выход :

 E: / nodejs> узел test.js
Идентификатор пользователя: 0 17:14:51
Идентификатор пользователя: 1 17:14:51
Идентификатор пользователя: 2 17:14:51
Идентификатор пользователя: 3 17:14:51
Идентификатор пользователя: 4 17:14:51
Идентификатор пользователя: 5 17:14:51
Идентификатор пользователя: 6 17:14:51
Идентификатор пользователя: 7 17:14:51
Идентификатор пользователя: 8 17:14:51
Идентификатор пользователя: 9 17:14:51

Характеристики

  • Простой интерфейс запроса и привязки параметров
  • Полная поддержка буфера / BLOB-объектов
  • Обширная поддержка отладки
  • API сериализации запросов
  • Поддержка расширений
  • Написан на современном C ++ и протестирован на утечки памяти

Установка

Вы можете использовать npm для загрузки и установки l:

Последний пакет sqlite3: npm установить sqlite3

Основная ветка GitHub: npm install https://github.com/mapbox/node-sqlite3/tarball/master

В обоих случаях модуль автоматически создается с использованием внутренней версии npm-gyp, поэтому ваша система должна соответствовать требованиям node-gyp.

Поддерживаемые платформы

Модуль sqlite3 работает с Node.js v0.10.x или v0.11.x (хотя только v0.11.13 и выше). Двоичные файлы для большинства версий и платформ Node предоставляются по умолчанию через node-pre-gyp .

Node-sqlite3 имеет встроенную сериализацию вызова функций и автоматически ожидает перед выполнением действия блокировки, пока не будет выполнено другое действие. Это означает, что безопасно начинать вызывать функции для объекта базы данных, даже если он еще не полностью открыт. Функция Database # close () будет ожидать завершения всех ожидающих запросов перед закрытием базы данных.

API

новый sqlite3.Database (имя файла, [режим], [обратный вызов])

Возвращает новый объект базы данных и автоматически открывает базу данных. Не существует отдельного метода для открытия базы данных.

название Описание
имя файла Допустимые значения: имена файлов, ": memory:" для анонимной базы данных в памяти и пустая строка для анонимной дисковой базы данных. Анонимные базы данных не сохраняются, и при закрытии дескриптора базы данных их содержимое теряется.
режим (необязательно) Один или несколько из sqlite3.OPEN_READONLY, sqlite3.OPEN_READWRITE и sqlite3.OPEN_CREATE. Значением по умолчанию является OPEN_READWRITE | OPEN_CREATE.
обратный вызов (необязательно) Если предусмотрено, эта функция будет вызываться при успешном открытии базы данных или при возникновении ошибки. Первый аргумент - объект ошибки. Когда это ноль, открытие успешно. Если обратный вызов не предоставлен и произошла ошибка, событие ошибки с объектом ошибки в качестве единственного параметра будет передано объекту базы данных. Если открытие завершилось успешно, событие open без параметров выдается независимо от того, был ли предоставлен обратный вызов или нет.

sqlite3.verbose ()

Устанавливает подробный режим выполнения для создания длинных трасс стека. Нет способа сбросить это. Смотрите вики-страницу по отладке для получения дополнительной информации.

Закрыть базу данных

База данных # близко ([вызов])

Закрывает базу данных.

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

Запустить SQL-запрос

База данных # run (sql, [param, ...], [callback])

Запускает SQL-запрос с указанными параметрами и впоследствии вызывает обратный вызов. Он не извлекает никаких данных результатов. Функция возвращает объект базы данных, для которого она была вызвана, для обеспечения возможности цепочки функций.

название Описание
SQL SQL-запрос для запуска. Если SQL-запрос недопустим и в функцию передан обратный вызов, он вызывается с объектом ошибки, содержащим сообщение об ошибке из SQLite. Если обратный вызов не был пройден и подготовка не удалась, событие ошибки будет отправлено в базовый объект Statement.
param, ... (необязательно) Когда оператор SQL содержит заполнители, вы можете передать их здесь. Они будут связаны с оператором до его выполнения. Существует три способа передачи параметров связывания: непосредственно в аргументах функции, в виде массива и в качестве объекта для именованных параметров.

Запускает SQL-запрос с указанными параметрами

База данных # get (sql, [param, ...], [callback])
Запускает SQL-запрос с указанными параметрами и после этого вызывает обратный вызов с первой строкой результата. Функция возвращает объект базы данных, чтобы обеспечить цепочку функций.

База данных # все (sql, [param, ...], [callback])
Запускает SQL-запрос с указанными параметрами и вызывает обратный вызов со всеми строками результата. Функция возвращает объект базы данных, чтобы обеспечить цепочку функций.

База данных # каждая (sql, [param, ...], [callback], [complete])
Запускает SQL-запрос с указанными параметрами и вызывает функцию обратного вызова для каждой строки результатов. Функция возвращает объект базы данных, чтобы обеспечить цепочку функций.

Запускает SQL-запросы в предоставленной строке

База данных # exec (sql, [callback])
Запускает все SQL-запросы в предоставленной строке. Строки результата не извлекаются. Функция возвращает объект базы данных, чтобы обеспечить цепочку функций. Если запрос не выполнен, никакие последующие операторы не будут выполнены.

Подготовка оператора SQL

База данных # подготовить (sql, [param, ...], [обратный вызов])
Подготавливает оператор SQL и, при желании, связывает указанные параметры и вызывает обратный вызов по завершении. Функция возвращает объект Statement.

Оператор # bind ([param, ...], [callback])
Связывает параметры с подготовленным оператором и вызывает обратный вызов, когда выполнено или когда произошла ошибка. Функция возвращает объект Statement, чтобы обеспечить цепочку функций. Первый и единственный аргумент для обратного вызова является нулевым, если привязка была успешной, в противном случае это объект ошибки.

Заявление # сброс ([обратный вызов])
Сбрасывает курсор строки оператора и сохраняет привязки параметров. Используйте эту функцию для повторного выполнения одного и того же запроса с теми же привязками. Функция возвращает объект Statement, чтобы обеспечить цепочку функций. Обратный вызов будет вызван после завершения сброса.

Заявление # финализации ([вызов])
Завершает утверждение. Обычно это необязательно, но если вы испытываете большие задержки перед выполнением следующего запроса, может потребоваться явная доработка вашего оператора. Это может быть в случае, когда вы запускаете эксклюзивный запрос (see section Сериализация).

Оператор # run ([param, ...], [callback])
Связывает параметры и выполняет инструкцию. Функция возвращает объект Statement, чтобы обеспечить цепочку функций.

Оператор # get ([param, ...], [callback])
Связывает параметры, выполняет инструкцию и извлекает первую строку результата. Функция возвращает объект Statement, чтобы обеспечить цепочку функций.

Оператор # all ([param, ...], [callback])
Связывает параметры, выполняет оператор и вызывает обратный вызов со всеми строками результата. Функция возвращает объект Statement, чтобы разрешить цепочку функций.

Оператор # каждый ([param, ...], [callback], [complete])
Связывает параметры, выполняет оператор и вызывает обратный вызов для каждой строки результатов. Функция возвращает объект Statement, чтобы обеспечить цепочку функций.

отладка

Написание асинхронных функций с использованием пула потоков, к сожалению, также удаляет всю информацию трассировки стека, что делает отладку очень сложной, поскольку вы видите только сообщение об ошибке, а не то, какой оператор вызвал ее. Чтобы смягчить эту проблему, узел-sqlite3 имеет подробный режим, который захватывает следы стека при постановке в очередь запросов. Чтобы включить этот режим, вызовите sqlite3.verbose () или вызовите его напрямую, когда требуется: var sqlite3 = require ('sqlite3'). Verbose ().

Когда вы генерируете ошибку из обратного вызова, переданного любой из функций базы данных, node-sqlite3 добавит информацию трассировки стека из исходного вызова, например так:

var db = new sqlite3.Database('abcd);
                              ^^^^^^^
SyntaxError: Unexpected token ILLEGAL
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3

Обратите внимание, что вы не должны включать подробный режим в рабочих настройках, так как снижение производительности для сбора следов стека достаточно велико. Подробный режим в настоящее время не добавляет информацию трассировки стека к объектам ошибок, генерируемым в объектах Statement или Database.

База данных № включена («трассировка», [обратный вызов])
Событие трассировки генерируется всякий раз, когда выполняется запрос. Первый и единственный параметр для обратного вызова - это строка SQL, отправленная в базу данных. Событие генерируется, как только выполняется запрос (например, с помощью .run () или .get ()). Одно заявление может быть выпущено более одного раза. Операторы EXPLAIN не будут вызывать событие, поэтому можно безопасно передать все запросы SQL, полученные из этого события, обратно в базу данных с префиксом EXPLAIN QUERY PLAN.

Если вы выполняете операторы из этого обратного вызова, убедитесь, что вы не входите в бесконечный цикл!

База данных № включена («профиль», [обратный вызов])
Событие профиля генерируется при завершении запроса. Первый параметр - это строка SQL, отправленная в базу данных, второй параметр - приблизительное время, необходимое для выполнения в миллисекундах. Событие отправляется после завершения запроса.

Если вы выполняете операторы из этого обратного вызова, убедитесь, что вы не входите в бесконечный цикл!

Структура базы данных «hr»:

«час

Предыдущая: Node-MySQL
Далее: Введение

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code