这学期的专业课有一门就是数据库。课也快上完了,但是我个人认为这是一门没有什么卵用的课程,忽略了实际运用,只讲理论,这也是我非常不爽的原因。

都8102年了,还TM在用SQL Server 2008。这和我个人风格是非常不符合的,在之前,高中时学习了Access数据库,而大学我一直在使用了MongoDB这类缓存型数据库,体验还是不错。这次我使用的是MySQL数据库,这是我比较喜欢的关系型数据库。

让我们定个小目标,写个电台日志!这可是非常简单了,一张表就能搞定。成品在: https://bg6tti.intl.moe/(懒癌的我没有更新)

分析下电台日志需要什么?随便找一张QSL卡片,上面就记录了你需要些什么,日期,UTC时间,对方呼号,频率,通联模式,信号报告,备注,甚至还需要记录自己的天线和操作员等。

好啦,创建表

1
2
3
USE Radiolog
CREATE TABLE Radiolog (IndexID int, CALLSIGN varchar(16), DATE date, UTCTIME time, MHZ varchar(32), RST varchar(16), MODE varchar(16), RMKS varchar(255));
ALTER TABLE Radiolog CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

博主语言学习能力不强,C/C++写不好,Java不会,Golang半吊子,唯一熟悉的就只剩js了,所以,目前所以操作均在Node.js环境中完成(这大概可能就是算法不好的原因了)

在Node.js中,官方硬点(雾)了mysql这个包作为连接件。为了提高性能,还是要开个连接池

1
2
3
4
5
6
7
8
9
10
11
var mysql = require('mysql');

var pool = mysql.createPool({
host : 'localhost',
user : 'user',
password : 'password',
port: '3306',
database: 'Radiolog',
});

module.exports = pool;

由于博主主要是玩React/Vue的,比较崇尚使用Restful API,所以都是写接口,不使用服务端渲染。但是原理都一样。

不知道他们为什么那么讨厌回调,只要回调层数不大于6层都还好啊???

这是个最基本的玩法,展示下数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var mysql  = require('mysql');
var pool = require('./pool.js');

pool.getConnection(function(err, connection) {
if (err){
console.log("mysql pool connect error")
connection.release();
}
var totalSub = "select count(*) from Radiolog"
connection.query(totalSub,function (err, result) {
if(err){
console.log("mysql pool connect error")
connection.release();
return;
}
console.log(result[0]['count(*)'])
connection.release();
})
})

对应的每个接口,根据不同的请求query,然后拼接SQL语句,最后把结果抛出或者直接写回调,然后你的轮子就实现功能了。

蛮简单的。

不过,电台日志有专用的ADIF文件,这也是下一步博主在业余无线电编程的方向。
关于数据库,接下来尝试给博客编写个类似disqus的评论系统吧