Wrapper for multiple databases with a JDBC-like connection
Database-js implements a common, promise-based interface for SQL database access. Inspired by JDBC, it uses connection strings to identify the database driver. Wrappers around native database drivers provide a unified interface to handle databases. Thus, you can change the target database by modifying the connection string. π
Database-js has built-in prepared statements, even if the underlying driver does not support them. It is built on Promises, so it works well with ES7 async code.
npm install database-js
Driver (wrapper) | Note | Installation |
---|---|---|
ActiveX Data Objects | Windows only | npm i database-js-adodb |
CSV files | npm i database-js-csv | |
Excel files | npm i database-js-xlsx | |
Firebase | npm i database-js-firebase | |
INI files | npm i database-js-ini | |
JSON files | npm i database-js-json | |
MySQL | prior to MySQL v8 | npm i database-js-mysql |
MySQL2 | MySQL v8+ | npm i database-js-mysql2 |
MS SQL Server | npm i database-js-mssql | |
PostgreSQL | npm i database-js-postgres | |
SQLite3 | npm i database-js-sqlite3 | |
SQLite | npm i database-js-sqlite |
See here how to add a new driver.
Usage without async/await:
var Connection = require('database-js').Connection; // CONNECTION var conn = new Connection("sqlite:///path/to/test.sqlite"); // SQLite // new Connection("mysql://user:password@localhost/test"); // MySQL // new Connection("postgres://user:password@localhost/test"); // PostgreSQL // π Change the connection string according to the database driver // QUERY var stmt1 = conn.prepareStatement("SELECT * FROM city WHERE name = ?"); stmt1.query("New York") .then( function (results) { console.log(results); // Display the results } ).catch( function (reason) { console.log(reason); // Some problem while performing the query } ); // COMMAND var stmt2 = conn.prepareStatement("INSERT INTO city (name, population) VALUES (?, ?)"); stmt2.execute("Rio de Janeiro", 6747815) .then( function() { console.log( 'Inserted.' ); } ) .catch( function(reason) { console.log('Error: ' + reason); } ); // ANOTHER COMMAND var stmt3 = conn.prepareStatement("UPDATE city SET population = population + ? WHERE name = ?"); stmt3.execute(1, "Rio de Janeiro") .then( function() { console.log( 'Updated.' ); } ) .catch( function(reason) { console.log('Error: ' + reason); } ); // CLOSING THE CONNECTION conn.close() .then( function() { console.log('Closed.'); } ) .catch( function(reason) { console.log('Error: ' + reason); } );
Using async/await:
const Connection = require('database-js').Connection; (async () => { let conn; try { // CONNECTION conn = new Connection('mysql://user:password@localhost/test'); // QUERY const stmt1 = conn.prepareStatement('SELECT * FROM city WHERE name = ?'); const results = await stmt1.query('New York'); console.log(results); // COMMAND 1 const stmt2 = conn.prepareStatement('INSERT INTO city (name, population) VALUES (?,?)'); await stmt1.execute('Rio de Janeiro', 6747815); // COMMAND 2 const stmt2 = conn.prepareStatement('UPDATE city SET population = population + ? WHERE name = ?'); await stmt1.execute(1, 'Rio de Janeiro'); } catch (reason) { console.log(reason); } finally { try { await conn.close(); } catch (err) { console.log(err); } } })();
class Connection { /** Creates and prepares a statement with the given SQL. */ prepareStatement(sql: string): PreparedStatement; /** Closes the underlying connection. */ close(): Promise<void>; /** Indicates whether the underlying driver support transactions. */ isTransactionSupported(): boolean; /** Returns true if the underlying driver is in a transaction, false otherwise. */ inTransaction(): boolean; /** * Starts a transaction (if supported). * * Transactions can fail to start if another transaction is already running or * if the driver does not support transactions. */ beginTransaction(): Promise<boolean>; /** * Commits a transaction (if supported). * * Transactions can fail to commit if no transaction was started, or if the driver * does not support transactions. */ commit(): Promise<boolean>; /** * Cancels a transaction (if supported). * * Transaction can fail to be rolled back no transaction was started, or if the driver * does not support transactions. */ rollback(): Promise<boolean>; }
class PreparedStatement { /** * Performs the prepared SQL query with the given arguments. * Returns a Promise with an array of rows. */ query(...args: any): Promise<Array<any>>; /** Executes the prepared SQL statement with the given arguments. */ execute(... args): Promise<any>; }
-
Wiki for more examples and how to use a connection pool.
-
codeceptjs-dbhelper - Allows to use database-js inside CodeceptJS tests (as a helper).