node.js 操作 postgresql 數據庫

上一篇node.js訪問postgresql數據庫,主要是在同一個文件裏面實現對數據庫的操作。


這篇node.js操作postgresql數據庫,採用的是兩個文件的方式實現,一個文件相當於客戶端,實現連接數據庫,調用相應的函數,而另一個文件是具體實現函數的。


在你安裝了node.js,postgresql數據庫(不一定是本機)和相應的模塊的基礎上,在數據庫中建表teacher。並插入幾條測試數據,這兒插入的測試數據爲:

create table teacher(id varchar(10),name varchar(20),pwd varchar(10));

insert into teacher values('1','aaa','111');
insert into teacher values('2','bbb','222');
insert into teacher values('3','ccc','333');
insert into teacher values('4','ddd','444');

1) client.js

var f = require('./function');
var pg = require('pg');

var conString = "tcp://postgres:postgres@localhost/my";

var client = new pg.Client(conString);

var value = ['10','fillp','abc'];
insertSQLString = 'insert into teacher values($1,$2,$3)';
selectSQLString = 'select * from teacher';
updateSQLString = "update teacher set NAME='ipone' where ID='4'";
deleteSQLString = "delete from teacher where ID='10'";

client.connect(function(error, results) {
    if(error){
        console.log('ClientConnectionReady Error: ' + error.message);
        client.end();
        return;
    }
    console.log('Connecting to postgres...');
    console.log('Connected to postgres automatically.');
    console.log('connection success...\n');

    f._select(client,selectSQLString);
    f._insert(client,insertSQLString,value);
    f._select(client,selectSQLString);
    f._delete(client,deleteSQLString);
});

2) function.js

function _insert(client,insertSQLString,value)
{
    console.log("insert beginning");
    client.query(insertSQLString, value,  function(error, results)
    {
        if(error)
        {
            console.log("ClientReady Error: " + error.message),
            client.end();
            return;
        }
        console.log('Inserted: ' + results.affectedRows + ' row.'),
        console.log('insert success...\n');
    });
    console.log("insert end\n");
}

function _select(client,selectSQLString)
{
    console.log("select beginning");
    client.query(selectSQLString,  function selectCb(error, results, fields)
    {
        console.log("in select callback function");
        if (error)
        {
            console.log('GetData Error: ' + error.message),
            client.end();
            return;
        }
        if(results.rowCount > 0)
        {
            var firstResult,
            resultSet = '';
            for(var i = 0, len = results.rowCount; i < len; i++)
            {
                firstResult = results.rows[i]; 
                resultSet += 'id:' + firstResult['id'] + ' ' + 'name:' + firstResult['name'] + ' ' + 
                             'pwd:' + firstResult['pwd'] + '\n'; 
            }
        }
        console.log(resultSet);
        /* 添加功能:使查詢結果集返回到客戶端並保證此函數的通用性. */
    });
    console.log("select end\n");
}

function _update(client,updateSQLString)
{
    console.log("update beginning");
    client.query(updateSQLString,function(error, results)
    {
        if(error)
        {
            console.log("ClientReady Error: " + error.message),
            client.end();
            return;
        }
        console.log('update success...\n');
    });
    console.log("update end\n");
}

function _delete(client,deleteSQLString)
{
    console.log("delete beginning");
    client.query(deleteSQLString,  function(error, results)
    {
        if(error)
        {
            console.log("ClientReady Error: " + error.message),
            client.end();
            return;
        }
        console.log('delete success...\n');
    });
    console.log("delete end\n");
}


exports._insert = _insert;
exports._select = _select;
exports._update = _update;
exports._delete = _delete;


3) 運行node client.js,結果如下:

Connecting to postgres...
Connected to postgres automatically.
connection success...

select beginning
select end

insert beginning
insert end

select beginning
select end

delete beginning
delete end

in select callback function
id:1 name:aaa pwd:111
id:2 name:bbb pwd:222
id:3 name:ccc pwd:333
id:4 name:ddd pwd:444

Inserted: undefined row.
insert success...

in select callback function
id:1 name:aaa pwd:111
id:2 name:bbb pwd:222
id:3 name:ccc pwd:333
id:4 name:ddd pwd:444
id:10 name:fillp pwd:abc

delete success...

在函數實現裏面,我們採用了回調函數的形式實現,根據輸出信息可以很號的看出node.js的主要特性:非阻塞



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章