Shell脚本(15)——JS宏读写数据库
创作者俱乐部成员
前面介绍了JS宏读写外部文件的问题,今天再来补上JS宏读写数据库
用的还是用cgi方式(主要是为了偷懒😁)
首先,还是下载busybox.exe和sqlite3.exe放到环境变量PATH里,便于后面使用
然后创建cgi-bin文件夹,里面新建sql.sh文件,内容是
👋 | #!/bin/sh echo -e 'Content-type: application/json; charset=utf-8\n' ../sqlite3 -json ../a.db |
第一行声明使用sh执行该脚本
第二行声明返回json,编码是utf-8
第三行用sqlite3执行请求的body,设置返回格式是json,数据库是cgi-bin的上级目录里的a.db
然后在cmd里启动cgi服务,busybox httpd -p 8080,如果你喜欢,可以改成在JS里用shell执行,但容易因为沙箱保护、防火墙等问题导致运行失败,所以还不如写个批处理或cmd里手动执行
最后,就可以在JS宏里通过fetch发送要执行的SQL代码,来读写数据库了
🔔 | function sql() { fetch('http://localhost:8080/cgi-bin/sql.sh', { method: 'POST', body: 'create table t1 (x int);insert into t1 values (123);select * from t1;' }).then(r=>r.json()).then(e=>{console.log(JSON.stringify(e))}) } |
只有一句fetch,url指向cgi-bin里的sql.sh脚本,method是POST,body是要执行的SQL,返回来的已经是json了,解析一下随便用吧
需要写的代码已经足够少了(能偷懒就偷懒),sqlite3功能上也足够用了,且在linux上一样用
如果不满足于这种基本的操作,还可以用node、py、php、c#等语言自己实现数据库的网络接口,或者直接使用php-crud-api、go-rest这种单文件的restful接口,运行后,JS宏可直接通过fetch读写数据库(restful接口),这种方案还更成熟、更安全,还直接的保护了你的代码,用户只是发送数据,获得结果,具体的处理过程在你的控制之中,不用再考虑vba代码保护的问题
至此,JS宏对外部数据访问的短板其实已经补上了,祝玩的愉快😁