npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-database

v0.0.11

Published

通用数据库操作模块,提供常用的数据库操作接口,支持Microsoft Access,Microsoft SQL Server,MySQL数据库。

Downloads

4

Readme

通用数据库操作模块

提供常用的数据库操作接口,支持Microsoft Access,Microsoft SQL Server,MySQL和SQLite数据库。

NOTE 对于联表查询时,如果多个表中具有相同的字段,那么应该指定别名而不是使用*来查询,否则在某些数据库中会报错!!

Environment

Access

默认使用Microsoft.JET.OLEDB.4.0连接,支持Office 97-2003(.mdb)。如果是Office 2007及以上的版本(.accdb),请手动指定驱动程序,例如:Microsoft.ACE.OLEDB.12.0

SQL Server

记得开启TCP/IP,提高访问速度。

MySQL

默认使用32位5.1版本驱动。如果是其它版本驱动程序,请手动指定驱动程序版本,例如:5.3 unicode

MYSQL ODBC 5.1 Driver下载: http://dev.mysql.com/get/Downloads/Connector-ODBC/5.1/mysql-connector-odbc-5.1.13-win32.msi

SQLite

默认使用32位SQLite 3驱动。

SQLite ODBC 3 Driver下载: http://www.ch-werner.de/sqliteodbc/sqliteodbc.exe

Methods

connect(options)

连接数据库,如果连接失败,会抛出错误信息。

options: 数据库连接设置参数(JSON),对应不同的数据库,参数略有不同。

对于Access数据库:

{
    "dbType": 0,                        // 表示是Access类型数据库
    "dbPath": "./excms.mdb",            // 数据库绝对路径或相对路径
    "dbUser": "",                       // 可选,用户名
    "dbCode": "",                       // 可选,密码
    "driver": ""                        // 可选,数据库连接驱动
},

对于SQL Server数据库

{
    "dbType": 1,            // 表示是SQL Server类型数据库
    "server": ".",          // 服务器地址
    "dbPort": "",           // 可选,服务器端口
    "dbName": "excms",      // 数据库名称
    "dbUser": "sa",         // 用户名
    "dbCode": "123456"      // 密码
},

对于MySQL数据库

{
    "dbType": 2,            // 表示是MYSQL类型数据库
    "server": "localhost",  // 服务器地址
    "dbPort": "",           // 可选,服务器端口
    "dbName": "excms",      // 数据库名称
    "dbUser": "root",       // 用户名
    "dbCode": "123456",     // 密码
    "driver": ""            // 可选,ODBC驱动版本
}

对于SQLite数据库

{
    "dbType": 3,                        // 表示是Access类型数据库
    "dbPath": "./excms.db",             // 数据库绝对路径或相对路径
    "driver": ""                        // 可选,数据库连接驱动
}

Example:

var db = require('database');
var config = {dbType: 0, dbPath: './excms.mdb'};
db.connect(config);             // 返回db自身

table(tables)

设置要操作的表格,返回this。便于多次操作的链式写法。

tables: 表名,如果是多个表则使用数组

createDatabase(options)

创建数据库,通常在虚拟主机上没有足够的权限创建。

options: 与connect相同。

createTable(table, fields)

创建一张数据表。

table: 表名

fields: 字段列表(array)

clearTable(table)

清除一张表中所有数据,并重置索引。该操作不可恢复,请慎用。

table: 表名

deleteTable(table)

彻底删除一张表,不可恢复,请慎用。

table: 表名

appendField(table, fields)

添加字段。

table: 表名

fields: 字段列表(array)

deleteFiled(table, fields)

删除字段。

table: 表名

fields: 字段列表(array)

select(tables, fields, where, orders, top)

查询记录,返回this。后面可跟toJSON()以JSON返回,或者rs返回原始记录集对象。

tables: 表名,如果是多个表则使用数组

fields: 字段,如果是多个字段则使用数组

where: 可选,查询条件

orders: 可选,排序字段,如果是多个字段则使用数组

top: 可选,查询记录条数

Example:

// 单表查询
var config = {
    action: "select",
    tables: "cms_news",
    fields: ["id", "title", "posttime"],
    where: "title like '菱湖%'",
    orders: "id desc",
    top: 4
};

var ret = db.select(config.tables, config.fields, config.where, config.orders, config.top).toJSON();
console.log(ret);

//[
//    {
//        "id": 107,
//        "title": "菱湖早茶与渔业",
//        "posttime": "2015年8月29日 7:38:37"
//    }
//    ,
//    ...
//    {
//        "id": 104,
//        "title": "菱湖渔业协会7点早市",
//        "posttime": "2015年8月27日 7:11:24"
//    }
//]
// 多表查询
var config = {
    action: "select",
    tables: ["cms_news as N", "cms_news_class as C"],
    fields: ["N.id", "N.title", "N.posttime", "N.category", "N.poster", "C.id", "C.title as cate_title"],
    where: "N.category=C.id and N.title like '菱湖%'",
    orders: "N.id desc",
    top: 4
};

var ret = db.select(config.tables, config.fields, config.where, config.orders, config.top).toJSON();
console.log(ret);
//[
//    {
//        "all": {
//            "N.id": 107,
//            "N.title": "菱湖早茶与渔业",
//            "N.posttime": "2015年8月29日 7:38:37",
//            "N.category": 5,
//            "N.poster": 1,
//            "C.id": 5,
//            "cate_title": "要闻"    // <-- 指定了别名,则使用别名
//        },
//        "cms_news": {
//            "id": 107,
//            "title": "菱湖早茶与渔业",
//            "posttime": "2015年8月29日 7:38:37",
//            "category": 5,
//            "poster": 1
//        },
//        "cms_news_class": {
//            "id": 5,
//            "title": "要闻"
//        }
//    }
//    ...
//]

sel(fields, where, orders, top)

查询记录,返回this,用于链式写法操作相同表格。后面可跟toJSON()以JSON返回,或者rs返回原始记录集对象。

getLastId(id, table)

获取最后一条记录的id值

id: 要查询的id字段名称

table: 要查询的表格,如果省略则使用上一次操作的表格

exist(where, table)

判断表中是否存在某字段值

where: 要查询的条件

table: 要查询的表格,如果省略则使用上一次操作的表格

insert(tables, fields)

插入记录,返回this。后面可跟ar返回受影响的行数,或者id返回新记录的id值。

tables: 表名,如果是多个表则使用数组

fields: 字段,如果是多个字段则使用JSON

ins(fields)

插入记录,返回this,用于链式写法操作相同表格。后面可跟ar返回受影响的行数,或者id返回新记录的id值。

update(tables, fields, where)

更新记录,返回this。后面可跟ar返回受影响的行数。

tables: 表名,如果是多个表则使用数组

fields: 字段,如果是多个字段则使用JSON

where: 可选,查询条件

upd(fields, where)

更新记录,返回this,用于链式写法操作相同表格。后面可跟ar返回受影响的行数。

remove(tables, fields, where, orders, top)

删除记录,返回this。后面可跟ar返回受影响的行数。

tables: 表名,如果是多个表则使用数组

fields: 字段,如果是多个字段则使用数组

where: 可选,查询条件

orders: 可选,排序字段,如果是多个字段则使用数组

top: 可选,查询记录条数

rem(fields, where, orders, top)

删除记录,返回this,用于链式写法操作相同表格。后面可跟ar返回受影响的行数。

runSQL(sql)

执行SQL语句,返回记录集(this.rs)或受影响的行数(this.ar)或者插入记录的索引(this.id)。

sql: 要执行的sql语句(access语法),为了兼容多种数据库,sql语句中的字符串全部需要使用'包围。

page

分页查询,可以是单表、多表连接或者包含子查询的复杂SQL查询语句。

toJSON(index)

将记录集结果转为JSON。如果给了index参数,则返回对应索引的JSON;如果未给定index参数,则返回数组;如果无结果,则返回false。

如果是多表查询,且查询语句中包含*,请使用toArray()方法返回结果。

Example:

var ret1 = db.runsql('select top 10 * from users').toJSON();
ret1.forEach(function(item){
    console.log(item.username);
})

var ret2 = db.runsql('select * from users where id=1').toJSON(0);
console.log(ret2);

// 其它示例请查看select()方法

toArray(index)

将记录集结果转为Array。如果给了index参数,则返回对应索引的数组;如果未给定index参数,则返回整个结果数组;如果没有查询到记录,则返回空数组。

forEach(callback)

循环处理查询得到记录集。

db.runsql('select top 10 * from users');
db.forEach(function(value, name, rowIndex, colIndex) {
    console.log(value, name, rowIndex, colIndex);
});

resolveSQL(sql)

将Access的语句转换为Mssql/Mysql的语句。

sql: 原始的sql语句(access语法),为了兼容多种数据库,sql语句中的字符串全部需要使用'包围。

Example:

var sql = "select top 10 * from [users]";
sql = db.resolveSQL(sql);
console.log(sql);
// prints:
// select * from `users` limit 10

produceSQL(action, tables, fields, where, orders, top)

根据当前连接的数据库类型,生成SQL语句。该方法对于复杂的SQL语句无力,请直接使用runsql方法。

action: 执行方法,[select, delete, update, insert]

tables: 表名,如果是多个表则使用数组

fields: 字段,如果是多个字段则使用数组(select, delete)或JSON(update, insert)

where: 可选,查询条件

orders: 可选,排序字段,如果是多个字段则使用数组

top: 可选,查询记录条数

Example:

var config = {
    action: "select",
    tables: ["cms_news as N", "cms_news_class as C"],
    fields: ["N.id", "N.title", "N.posttime", "N.category", "N.poster", "C.id", "C.title"],
    where: "N.category=C.id and N.title like '菱湖%'",
    orders: "N.id desc",
    top: 4
};

var db = require("database");
db.options = {};
db.options.dbType = 0;
var sql1 = db.produceSQL(config.action, config.tables, config.fields, config.where, config.orders, config.top);
console.log(sql1);
// prints:
// select top 4 N.id,N.title,N.posttime,N.category,N.poster,C.id,C.title from cms_news as N,cms_news_class as C where N.category=C.id and N.title like '菱湖%' order by N.id desc
db.options.dbType = 2;
var sql2 = db.produceSQL(config.action, config.tables, config.fields, config.where, config.orders, config.top);
console.log(sql2);
// prints:
// select N.id,N.title,N.posttime,N.category,N.poster,C.id,C.title from cms_news as N,cms_news_class as C where N.category=C.id and N.title like '菱湖%' order by N.id desc limit 4

getTables()

遍历数据库,返回所有表名及其中字段信息。

Example:

var tables = db.getTables();
console.log(tables);

/* prints like bellow:
{
    "users": {
        "id": {
            Name: "id",
            Type: 0,
            Status: 0,
            DefinedSize: 4
        }
    }
}
*/

getFields(table)

返回表中字段信息

table: 表名,如果不指定则使用上一次操作的表格

getVersion()

获取数据库的版本号,例如:Microsoft SQL Server 2008 R2 Service Pack 2。

Objects

options

原始的数据库连接参数对象。

conn

当前的数据库连接对象。

rs

当前的记录集(RecordSet)。

ar

受影响的行数(Affected rows)。

id

插入数据后的id值

dbTypes

支持的数据库类型的代号。

fdTypes

通用字段类型。为了兼容所有数据库,在创建表的时候,请使用通用字段类型。

fdCodes

数据表字段类型代号。