Socket
Socket
Sign inDemoInstall

database-js

Package Overview
Dependencies
0
Maintainers
2
Versions
15
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

database-js

Common database interface for JavaScript


Version published
Maintainers
2
Weekly downloads
1,070
decreased by-13.5%

Weekly downloads

Readme

Source

database-js

Build Status npm version Mentioned in Awesome Node.js downloads

Wrapper for multiple databases with a JDBC-like connection

Database-js implements a common, promise-based interface for SQL database access. Inspired by Java, it uses connection strings to identify the database driver. Wrappers around native database drivers provide a unified interface to handle databases. Thus, you don't need to modify your code (except the connection string) to change your database! 😉

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.

Contents

Install

npm install database-js

Drivers

Driver (wrapper)NoteInstallation
ActiveX Data ObjectsWindows onlynpm i database-js-adodb
CSV filesnpm i database-js-csv
Excel filesnpm i database-js-xlsx
Firebasenpm i database-js-firebase
INI filesnpm i database-js-ini
JSON filesnpm i database-js-json
MySQLnpm i database-js-mysql
MS SQL Servernpm i database-js-mssql
PostgreSQLnpm i database-js-postgres
SQLitenpm i database-js-sqlite

See here how to add a new driver.

Usage

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); } );

Async / await

Because database-js is built on Promises, it works very well with async/await. Compare the following code to the code from above. They accomplish the same thing.

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);
		}
    }
})();

Basic API

See the source code for the full API.

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>;
}

See also

License

MIT

Keywords

FAQs

Last updated on 05 Jun 2021

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc