db.js 代码:
console.log("开始连接mysql......");
var conn = require("mysql").createClient({
'host':'localhost',
'port':'3306',
'user':'root',
'password':''
});
ClientConnectionReady = function(client){
client.query('USE nodejs',function(error,results){
if(error){
console.log("数据库连接错误:" + error.message);
client.end();
return;
}
console.log("已经建立到数据库:nodejs的连接");
//插入一条测试数据
var sql = "INSERT INTO test SET id=?, user_name=?, nick_name=?",
values = [ , "jim", "jimmy"];
client.query(sql, values, function(error, results){
if(error) {
console.log("插入记录出错: " + error.message);
client.end();
return;
}
console.log('Inserted: ' + results.affectedRows + ' row.');
console.log('Id inserted: ' + results.insertId);
});
getData(client);
});
}
getData = function(client){
var sql = "select * from test";
client.query(sql, function selectCb(error, results, fields){
if(error){
console.log('查询出错:'+error.message);
client.end();
return;
}
console.log("查询表:test");
//console.log(fields);
console.log('查到结果:' + results.length + "条");
if(results.length > 0){ //查看第一条记录
var firstResult=results[0];
console.log('id:' + firstResult['id']);
console.log('user_name:' + firstResult['user_name']);
console.log('nick_name:' + firstResult['nick_name']);
}
});
client.end();
console.log("关闭数据库连接");
}
ClientConnectionReady(conn);
运行:
- 你这个代码写的不太规范啊,getData加var
- 数据库里有数据了嘛?getData(client);放到client.query的回调里试试
数据库里本来有5条我手动添加的数据 去掉getData 把查询操作放在 client.query 的回调里也试过 查询操作还是放在插入操作的后面执行的 仍旧查询不到记录 update操作也是正常的 就查询出问题 郁闷
@shaman 不是吧,应该你的代码有问题,你写个简单点的插入,然后回调里查询下看能不能出数据,我一直在用mysql这个库啊,没问题
@sumory 嗯 , 我再调试调试,看看代码哪里有问题
@sumory 晕,我在家里自己电脑上重装的mysql模块,能查询出结果了 , 代码没有问题,看来是之前在公司机子上的mysql模块有问题
client.end();
console.log(“关闭数据库连接”);
这个最好放在 query 的回调里面吧,因为是异步的
嗯 谢谢提醒。 问题又来了,今天回到公司我重装了 mysql 模块 , 硬是出现之前的问题 查询不出结果 ,增删改操作都可以。然后我在虚拟机ubuntu里 同样的代码和我在家里机器上win7都能查出结果, 出问题的机器是xp的 难道和操作系统有关系??
@shaman 这。。。可以增删说明 mysql 模块是没问题的,没那么囧吧,就不能查询
@fantasyni 我凌乱了,原来是公司机器上的mysql有问题,之前用的wamp5, 很多配置都有改动,我就重装了一下,都正常了。 感谢两位。
难道那个查询的方法调用不需要放到插入的回调函数里面吗? getData(client); 这样也无法保证你里面插入进去,就能查询出来了。
这里如果要想查询出的数据包含之前插入的数据 ,只需将查询操作放在插入操作后面就可以。
郁闷死,我也碰到这个问题,怎么也查询不到数据。