nodejs的数据库操作
1. nodejs怎么连接数据库
在node中输入npm install mysql(注意安装路径)
电脑必须安装mysql数据库(这是前提),创建一个数据库,建立一个表,本教程中用的是nodesmaple,表名是t_user
新建a.js代码:
[javascript] view plain
var mysql = require('mysql');
var conn = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'nodesmaple',
port: 3306
});
conn.connect();
conn.query('SELECT 1 + 1 AS solution',
function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution)
});
conn.end();
运行a.js node a.js 完成,ok!
2. nodejs数据库怎么都用
1、node_moles只是放一些依赖包,具体数据库文件当然是放在mysql目录下了。 2、要在不开编辑器前提下,使系统可访问,你只要在控制台中定位到你系统的目录后,使用node命令来启动即可
3. nodejs怎么连接数据库mysql
var mysql = require('mysql');
var conn = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database:'nodejs',
port: 3306
});
conn.connect();
//查询
// conn.query('SELECT * from user where name="wangwei"', function(err, result) {
// if (err) throw err;
// console.log(result);
// })
//新增
// conn.query('insert into user (username,password) values("huxiaona","123456")', function(err, result) {
// if (err) throw err;
// console.log(result);
// })
//删除
// conn.query('delete from user where username="wupeigui"', function(err, result) {
// if (err) throw err;
// console.log(result);
// })
conn.query('update user set id="1" where username="huxiaona"',function(err,result){
if (err) {throw err};
console.log("修改数据成功");
})
conn.end();
4. 如何在node.js里连接和使用mysql
通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选,本篇就来介绍下如何通过NodeJS来操作 MySQL 数据库。 安装MySQL模块到NodeJS中 我们需要让NodeJS支持MySQL,则需要将MySQL模块添加到系统支持库
想要快速了解Node.js ,赞生推荐亲看看 node.js_guide.pdf — node.js 开发指南 :想要电子版高清的 留言发送
如果不想留言 可以带你做飞机! 直接下载
Node.js
简单介绍一下node.js的操作吧
安装 node-mysql
$ npm install mysql
创建测试表
//数据库名 NodeSampleCREATE TABLE `NodeSample`.`MyTable` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`firstname` VARCHAR( 20 ) NOT NULL ,
`lastname` VARCHAR( 20 ) NOT NULL ,
`message` TEXT NOT NULL
) ENGINE = MYISAM ;
连接数据库
Js代码
var sys = require('sys');
var Client = require('mysql').Client;
var client = new Client();
client.user = 'someuser';
client.password = 'password';
client.connect(function(error, results) {
if(error) {
console.log('Connection Error: ' + error.message);
return;
}
console.log('Connected to MySQL');
});
5. nodejs简单访问及操作mysql数据库的方法示例
本文实例讲述了nodejs简单访问及操作mysql数据库的方法。分享给大家供大家参考,具体如下:
var
mysql
=
require('mysql');
//调用MySQL模块
mysql模块要安装
$
npm
install
mysql
//创建一个connection
var
connection
=
mysql.createConnection({
host
:
'127.0.0.1',
//主机
user
:
'root',
//MySQL认证用户名
password
:
'',
//MySQL认证用户密码
port:
'3306',
//端口号
database:''
//数据库名
});
//创建一个connection
connection.connect(function(err){
if(err){
console.log('[query]
-
:'+err);
return;
}
console.log('[connection
connect]
succeed!');
});
//执行SQL语句
connection.query('SELECT
1
+
1
AS
solution',
function(err,
rows,
fields)
{
if
(err)
{
console.log('[query]
-
:'+err);
return;
}
console.log('The
solution
is:
',
rows[0].solution);
});
//关闭connection
connection.end(function(err){
if(err){
return;
}
console.log('[connection
end]
succeed!');
});
注:nodejs在操作数据库的时候不用设置数据库的编码格式
set
names
utf8
希望本文所述对大家nodejs程序设计有所帮助。
您可能感兴趣的文章:nodejs连接mysql数据库简单封装示例-mysql模块nodejs进阶(6)—连接MySQL数据库示例nodejs实现的连接MySQL数据库功能示例Nodejs连接mysql并实现增、删、改、查操作的方法详解nodeJs实现基于连接池连接mysql的方法示例nodejs中操作mysql数据库示例NodeJS链接MySql数据库的操作方法Nodejs使用mysql模块之获得更新和删除影响的行数的方法NodeJs使用Mysql模块实现事务处理实例nodejs连接mysql数据库及基本知识点详解
6. nodejs安装数据库之后怎么使用
项目中需要使用mysql数据库,下面就介绍下怎么访问mysql
这里我使用的mac进行开发的,首先需要下载mysql
地址:http://dev.mysql.com/downloads/mysql/
参考这篇安装http://dev.mysql.com/doc/refman/5.0/en/macosx-installation.html
安装完成后可以在偏好设置里面看到mysql,通过这个可以启动关闭mysql。
默认安装完成后,数据库的root用户是没有密码的。
为了方便操作,这里我又安装了一个mysql的图形化操作工具sequelpro
下载地址:http://www.sequelpro.com/download/
安装成功并且登陆后的界面如下图所示:
以root登录后可以给root用户加上密码。
上面是对php/mysql%B0%B2%D7%B0/" target="_blank">mysql安装进行了简单的介绍。下面介绍下怎样使用nodejs访问mysql
创建express项目,这里我使用的db-mysql
官方网址:http://nodejsdb.org/db-mysql/
根据它上面的介绍
在这之前需要在命令行中运行下面这个命令:
代码如下
复制代码
export MYSQL_CONFIG=/usr/local/mysql/bin/mysql_config
然后安装db-mysql
代码如下
复制代码
npm install db-mysql
然后编写一个js文件,这里我参考官方例子,自己写了一个读取mysql中的test数据库中user表中的数据:
代码:
代码如下
复制代码
var mysql = require(‘db-mysql’);
new mysql.Database({
hostname: ‘localhost’,
user: ‘root’,
password: ‘password’,
database: ‘test’
}).connect(function(error) {
if (error) {
return console.log(‘CONNECTION error: ‘ + error);
}
this.query().
php/select/" target="_blank">select(‘*’).
from(‘user’).
execute(function(error, rows, cols) {
if (error) {
console.log(‘ERROR: ‘ + error);
return;
}
for(var i=0;i<rows.length;i++){
console.log(rows[i].name );
}
});
});
很简单,然后我用行这个js,但是出现了问题:
throw e; // process.nextTick error, or ‘error’ event on first tick
^
Error: Unable to load shared library /Users/wanzhang/WebstormProjects/ReadMysql/node_moles/db-
代码如下
复制代码
mysql/build/Release/mysql_bindings.node
at Object..node (mole.js:472:11)
at Mole.load (mole.js:348:31)
at Function._load (mole.js:308:12)
at Mole.require (mole.js:354:17)
at require (mole.js:370:17)
at Object.<anonymous> (/Users/wanzhang/WebstormProjects/ReadMysql/node_moles/db-mysql/db-mysql.js:18:15)
at Mole._compile (mole.js:441:26)
at Object..js (mole.js:459:10)
at Mole.load (mole.js:348:31)
at Function._load (mole.js:308:12)
解决方法:
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
然后再运行这个js文件,ok,会打印出表中数据。
上面就是nodejs访问mysql一个简单例子。
7. nodejs能操作数据库吗
可以。
安装mysql的方法:
npm install mysql
安装mongodb的方法
npm install mongodb --save
8. nodejs怎么后台操作mysql
连接流程代码如下:
var mysql = require('mysql'); //调用MySQL模块//创建一个connectionvar connection = mysql.createConnection({
host : '127.0.0.1', //主机
user : 'root', //MySQL认证用户名
password:'12345',
port: '3306',
database: 'node'});//创建一个connectionconnection.connect(function(err){
if(err){
console.log('[query] - :'+err); return;
}
console.log('[connection connect] succeed!');
});
//执行SQL语句connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) {
console.log('[query] - :'+err); return;
}
console.log('The solution is: ', rows[0].solution);
});
//关闭connectionconnection.end(function(err){
if(err){
return;
}
console.log('[connection end] succeed!');
});
关于Connection Optionos
要想创建一个数据库连接,先就要认识清楚Options
host:主机地址 (默认:localhost)
user:用户名
password:密码
port:端口号 (默认:3306)
database:数据库名
charset:连接字符集(默认:’UTF8_GENERAL_CI’,注意字符集的字母都要大写)
localAddress:此IP用于TCP连接(可选)
socketPath:连接到unix域路径,当使用 host 和 port 时会被忽略
timezone:时区(默认:’local’)
connectTimeout:连接超时(默认:不限制;单位:毫秒)
stringifyObjects:是否序列化对象(默认:’false’ ;与安全相关https://github.com/felixge/node-mysql/issues/501)
typeCast:是否将列值转化为本地JavaScript类型值 (默认:true)
queryFormat:自定义query语句格式化方法https://github.com/felixge/node-mysql#custom-format
supportBigNumbers:数据库支持bigint或decimal类型列时,需要设此option为true (默认:false)
bigNumberStrings:supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false)
dateStrings:强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false)
debug:开启调试(默认:false)
multipleStatements:是否许一个query中有多个MySQL语句 (默认:false)
flags:用于修改连接标志,更多详情:https://github.com/felixge/node-mysql#connection-flags
ssl:使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件
其它:
可以使用URL形式的加接字符串,不多介绍了,不太喜欢那种格式,觉得可读性差,也易出错,想了解的可以去主页上看。
MYSQL CURD操作
增加
var mysql = require('mysql');var DATABASE = "seckill";var TABLE="seckill"var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'12345',
port:'3306',
database: DATABASE
});
connection.connect();var addVip = 'insert into seckill(name,number) values(?,?)';var param = ['100元秒杀家教机',100];
connection.query(addVip, param, function(error, result){
if(error)
{
console.log(error.message);
}else{
console.log('insert id: '+result.insertId);
}
});
connection.end();
删除
var mysql = require('mysql');var DATABASE = "node";var TABLE="seckill"var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'12345',
port:'3306',
database: DATABASE
});
connection.connect();var addVip = 'delete from seckill where seckill_id = 1005';
connection.query(addVip, function(error, result){
if(error)
{
console.log(error.message);
}else{
console.log('affectedRows: '+result.affectedRows);
}
});
connection.end();
查找
var mysql = require("mysql");var DATABASE = "node";var TABLE="seckill"var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'12345',
port:'3306',
});
connection.connect();
connection.query('use '+DATABASE);
connection.query('select * from '+TABLE, function(error, results, fields){
if (error) { throw error;
} if (results) { for(var i = 0; i < results.length; i++)
{
console.log('%s %s',results[i].name,results[i].end_time);
}
}
});
connection.end();
修改
var mysql = require('mysql');var DATABASE = "seckill";var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'12345',
port:'3306',
database: DATABASE
});
connection.connect();var userSql = "update seckill set number = number-1 where seckill_id = ?";var param = [1000, 2];
connection.query(userSql, param, function (error, result) {
if(error)
{
console.log(error.message);
}else{
console.log('affectedRows: '+result.affectedRows);
}
});
connection.end();
结束连接其实有两种方法end(),destory();
end()
end()方法在queries都结束后执行,end()方法接收一个回调函数,queries执行出错,仍然后结束连接,错误会返回给回调函数err参数,可以在回调函数中处理!destory()
比较暴力,没有回调函数,即刻执行,不管queries是否完成!- DROP PROCEDURE IF EXISTS `P_SeckillInfo`;DELIMITER ;;CREATE DEFINER=`root`@`localhost` PROCEDURE `P_SeckillInfo`(IN ExtName VARCHAR(120),IN ExtNumber INT(11),OUT ExtReturnVal INT)
- TOP: BEGIN
- DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN
- ROLLBACK;
- SET ExtReturnVal = 0; -- Failed
- END;
- START TRANSACTION;
- INSERT INTO seckill(name, number) VALUES(ExtName,ExtNumber);
- SET ExtReturnVal = 1;
- SELECT ExtReturnVal;
- COMMIT;END;;
- DELIMITER ;262728293031323334
- var mysql = require("mysql");var pool = mysql.createPool({
- host: '127.0.0.1',
- user: 'root',
- password:'12345',
- port:'3306',
- database:'node'});//监听connection事件pool.on('connection', function(connection) {
- connection.query('select * from seckill', function(error, results, fields){
- if (error) { throw error;
- } if (results) { for(var i = 0; i < results.length; i++)
- {
- console.log('%s %s',results[i].name,results[i].end_time);
- }
- }
- });
- });//连接池可以直接使用,也可以共享一个连接或管理多个连接(引用官方示例)//直接使用pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
- if (err) throw err;
- console.log('The solution is: ', rows[0].solution);
- });//共享连接function myQuery(sql){
- pool.getConnection(function(err, connection) {
- connection.query(sql, function(err, result) {
- console.log(result); //释放连接
- connection.release();
- }); //Error: Connection already released,应该每次到连接池中再次获取
- // connection.query( 'SELECT * FROM seckill;', function(err, result) {
- // console.log(result);
- // connection.release();
- // });
- });
- }
- myQuery('SELECT * FROM seckill;');
- myQuery('SELECT * FROM seckill;');
waitForConnections
connectionLimit
连接数限制,默认:10queueLimit
最大连接请求队列限制,设置为0表示不限制,默认:0- var mysql = require('mysql');var db_config = {
- host: '127.0.0.1',
- user: 'root',
- password:'12345',
- port:'3306',
- database:'node'};var connection;function handleDisconnect() {
- connection = mysql.createConnection(db_config);
- connection.connect(function(err) {
- if(err) {
- console.log('进行断线重连:' + new Date());
- setTimeout(handleDisconnect, 2000); //2秒重连一次
- return;
- }
- console.log('连接成功');
- });
- connection.on('error', function(err) {
- console.log('db error', err); if(err.code === 'PROTOCOL_CONNECTION_LOST') {
- handleDisconnect();
- } else {
- throw err;
- }
- });
- }
- handleDisconnect();
使用连接池
在数据库中执行如下代码创建一个存储过程
调用示例:
1.连接池的创建,使用createPool方法,options和createConntion一致;
2.其它连接池配置选项
当连接池没有连接或超出最大限制时,设置为true且会把连接放入队列,设置为false会返回error
断开重连
示例代码:
首先关闭mysql服务,然后执行程序,会一直打印断线重连,当再次开启mysql服务后,打印连接成功。
9. node.js怎么把数据存入数据库
nodejs数据存mongodb:
首先创建数据库保存用户信息
数据库创建名 users 集合并插入条用户信息前没 users 集合mongodb 直接创建
> db.users.insert( { "userId":1, "name":"tom", "email":"[email protected]" })
查找信息使用 find 或者 findOne区别于 findOne 返结
db.users.findOne( {"userId": 1})
返结:
{
"_id" : ObjectId("5413be6e9e1c9f9c4386756d"),
"userId" : 1,
"name" : "tom",
"email" : "[email protected]"
}
驱程序
编辑 package.json, 添加于 mongodb 引用
{
"name": "express-api",
"version": "0.0.1",
"dependencies": {
"express": "2.5.9",
"ejs": "0.4.2",
"mongodb": "1.4.1"
}
}
重新 npm install 安装 mongodb 驱
使用 MongoDB 数据库
修改代码首先 require mongodb 模块连接 mongodb 数据库
var mongo = require("mongodb");
var express = require("express");
var app = express.createServer();
app.set("view engine", "ejs");
app.set("views", __dirname + "/views");
app.set("view options", { layout: false });
app.get("/", function (request, response) {
response.render("index");
});
app.get("/user/:id", function (request, response) {
var id = request.params.id;
console.log(id);
app.users.findOne({ "userId": +id }, function (error, doc) {
if (error) return next(error);
response.json(doc);
});
});
// connect mongodb
var server = new mongo.Server("127.0.0.1", 27017);
var db = new mongo.Db("members", server, {safe:true }).open(function (error, client) {
if (error) throw error;
console.log("\033[96m + \033[39m connected to mongodb");
app.users = new mongo.Collection(client, "users");
client.ensureIndex("users", "userId", function (error) {
if (error) throw error;
console.log("\033[96m + \033[39m ensured index.");
console.log("Web Server listening ......");
app.listen(3000);
});
});
注意现数据库查找用户id 前面 + 用表单字符串类型数据转换需要数字类型
app.users.findOne({ "userId": +id }, function (error, doc) {
if (error) return next(error);
response.json(doc);
});
10. nodejs如何判断数据库操作是否执行完毕
判断如下:
将运行结果用arr.length来判断,如果arr.length不像我们期望的那样,比如由于网络传输或者处理异常,少一条,那么我们将无法做后续的处理。这种处理方式强业务耦合;不具有普适性。taskWatcher 充当异步任务执行情况的观察员,仅与异步过程的调用次数有关,且与其他处理过程无关。方法返回一个 Promise, 它将在上述可迭代对象中的所有 Promise 被 resolve 之后被 resolve,或者在任一 Promise 被 reject 后被 reject。