SQLite node操作
添加依赖包
// npm install --save sqlite3
"dependencies": {
"sqlite3": "^5.0.2"
}
使用node操作sqlite3数据库
其实官方文档已经说得很清楚了
下面写一点补充
- 如何使用async/await来访问数据库
在sql语句中添加参数有一下办法
- 使用
?
在后面的run
each
方法的参数中使用数组来对应- 使用
$param
在参数中使用对象{$param:param}
- 土办法,直接用字符串拼接
- 使用模板字符串 注意模板字符串是用 ` 来包含的其中使用
${param}
替换参数
第二个要注意的是如果
Statement#each()等方法返回为空则不会调用回调
我的解决方法是在后面的回调判断count==0
// dbc 部分
function selectStudent(params) {
let sql = `SELECT sname,cname,snumber,age,gender FROM student WHERE snumber=$snumber`
// 打开数据库
let db = new sqlite3.Database(dbPath, err => {
if (err !== null) console.log(err); // 输出错误信息
});
let select = db.prepare(sql)
return new Promise((resolve,rejects)=>{
select.each(params, (err, row)=> {
if(err) {console.log(err);rejects(null)};
resolve(row)
},(err,count)=>{
if(count==0) resolve(null)
})
select.finalize()
})
}
// 调用 当然使用await的话函数应该是async的
let res = await dbc.selectStudent({$snumber:snumber})
sqlite管理工具
- navivat for sqlite
- vscode SQLTools插件(?? 这个不知道为什么我使用的时候有bug,可能是操作有问题)
- 吐槽一下vscode SQLTools的坑
在vscode中安装SQLtools插件来管理我放在项目里的数据库
.db
文件,尼玛搞了半天我明明加了数据,但是使用node代码一直查不到,于是我又去用android stdio上面的插件看,发现数据库里面根本没有数据,那我vscode里面加的数据到哪里去了,甚至还能在管理插件里看到,这时候我才发现,即便我删除了.db
文件也可以连接到数据库😡,麻了,又去下了个navicat for sqlite 果然是那个插件有问题,不知道是不是我的使用方法有误,不过sqlite又不是sql,不就是连接文件就可以了吗,🤮
前台ajax原生js请求的使用
直接操作
var xhr = new XMLHttpRequest();
//设置请求的类型及url
xhr.open(method, baseUrl, true);
//post请求一定要添加请求头才行不然会报错
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// 设置响应
xhr.onreadystatechange = () => {
if (xhr.readyState == 4 && xhr.status == 200) {
//返回后的操作
}
};
//发送请求
xhr.send(`data=${JSON.stringify(data)}`)
注意:
- onreadystatechange不是返回的时候调用,看名字就能猜到是readState改变的时候调用的,
所以判断返回信息是通过readState
和status
而不是触发就代表返回了- onreadstatechange中如果使用
箭头函数
则this
不能拿到ctx
对象
包装为promise
function REQ(method, baseUrl, data) {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
//设置请求的类型及url
xhr.open(method, baseUrl, true);
//post请求一定要添加请求头才行不然会报错
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = () => {
if (xhr.readyState == 4 && xhr.status == 200) {
resolve(xhr)
}
};
//发送请求
if (data != undefined && data != null)
xhr.send(`data=${JSON.stringify(data)}`)
else xhr.send();
})
}