猫史档案馆


【代码】自动写数据库!代码萌新也能自己用SQL了!不会代码的福音(?)

用户:星星上的雪花星星上的雪花查看:2 回复:9 评论:2 创建时间:2021-11-21T22:23:25


【语言:JavaScript 和 SQLite】

使用前请在 [设置] 里确认你的数据库引擎是 [SQLite] 。支持部分PgSQL,不支持MySQL。

首先把这段代码复制到你的代码区里

/* 代码:星星上的雪花(主页 http://box3.fun/u/3910493) */
class SQLite {
    constructor(table){
        this.name = table;
    };
    static test(){};
    create(options){
        var name = this.name;
        return (async function () {
            try{
                await eval(`db.sql\`SELECT * FROM "${name}"\``)
            }catch(e){
                var code = "";
                for await(let e of options){
                    code += `"${e[0]}" ${e[1]},`;
                }
                code = code.slice(0, code.length - 1)
                const value = await eval(`db.sql\`CREATE TABLE IF NOT EXISTS "${name}" (${code})\``);
                return value
            }
            throw new Error("该创建数据表已经创建过了")
        })
    };
    searchAll(){
        var name = this.name;
        return (async () => {
            try{
                await eval(`db.sql\`SELECT * FROM "${name}"\``)
            }catch(e){
                if(e.message.search("no such") !== -1 || e.message.search("not an error") !== -1)throw new Error("该数据表未创建");else throw new Error("未知错误")
            }
            return (await eval(`db.sql\`SELECT * FROM "${name}"\``))
        })
    };
    searchBy(key, value){
        var name = this.name;
        return (async () => {
            try{
                await eval(`db.sql\`SELECT * FROM "${name}" WHERE ${key} = ${value}\``)
            }catch(e){
                if(e.message.search("no such") !== -1 || e.message.search("not an error") !== -1)throw new Error("该数据表未创建");else throw new Error("未知错误")
            }
            return (await eval(`db.sql\`SELECT * FROM "${name}" WHERE ${key} = ${value}\``))
        })
    };
    into(key, value){
        var name = this.name;
        return (async () => {
            try{
                await eval(`db.sql\`SELECT * FROM "${name}"\``)
            }catch(e){
                if(e.message.search("no such") !== -1 || e.message.search("not an error") !== -1)throw new Error("该数据表未创建");else throw new Error("未知错误")
            }
            return (await eval(`db.sql\`INSERT INTO "${name}" (${key}) VALUES (${value})\``));
        })
    };
    deleteAll(){
        var name = this.name;
        return (async () => {
            try{
                await eval(`db.sql\`SELECT * FROM "${name}"\``)
            }catch(e){
                if(e.message.search("no such") !== -1 || e.message.search("not an error") !== -1)throw new Error("该数据表未创建");else throw new Error("未知错误")
            }
            return (await eval(`db.sql\`DELETE FROM "${name}"\``));
        })
    };
    deleteBy(key, value){
        var name = this.name;
        return (async () => {
            try{
                await eval(`db.sql\`SELECT * FROM "${name}"\``)
            }catch(e){
                if(e.message.search("no such") !== -1 || e.message.search("not an error") !== -1)throw new Error("该数据表未创建");else throw new Error("未知错误")
            }
            return (await eval(`db.sql\`DELETE FROM "${name}" WHERE ${key} = ${value}\``));
        })
    }
};
<figure class="code-box" contenteditable="false"></figure>

具体怎么用?看下面示例

(async function () {
    /*
        创建数据库,名称叫 test (名字可以自己修改,)
        有v1和v2两个量可储存(名字可以自己修改,还可以增加更多的量,但格式必须依照着我写的那样)
        类型分别为TEXT(字符串)和INT(整数)
        意思是v1只能存储文本,v2只能
        其它数据类型如下:
            TEXT : 字符串
            INT : 整数,不能有小数点
            INTEGER : 整数,不能有小数点
            BIGINT : 超大整数,不能有小数点。存储时可以存数字,但查找后返回的是字符串,需要用 parseInt(这里填字符串) 重新转换成数字
            REAL : 带有小数点的数字
            NULL : 空值,啥也没有
            BLOB : 二进制数据(二进制帝...走错了)
            NUMERIC : 其他,SQL数据,一般地图暂时用不到
    */
    const value = await new SQLite("test").create([
        ["v1","TEXT"],
        ["v2","INT"]
    ])();
    world.say(JSON.stringify(value))
})();

(async function () {
    /*
        往名叫 test 的数据库里存入数据
        格式如下
    */
    const value = await new SQLite("test").into(
        ["v1","测试一号"],
        ["v2",114514]
    )();
    const value_2 = await new SQLite("test").into(
        ["v1","测试二号"],
        ["v2",23333]
    )();
    world.say(JSON.stringify(value))
    world.say(JSON.stringify(value_2))
})();

(async function () {
    /*
        查找数据库 test 的所有数据
    */
    const value = await new SQLite("test").searchAll()();
    world.say(JSON.stringify(value))
})();

(async function () {
    /*  在数据库 test 里查找所有 v1 是 “测试一号” 的所有数据  */
    const value = await new SQLite("test").searchBy("v1","测试一号")();
    world.say(JSON.stringify(value))
    /*  在数据库 test 里查找所有 v2 是 23333 的所有数据  */
    const value = await new SQLite("test").searchBy("v2",23333)();
    world.say(JSON.stringify(value))
})();

(async function () {
    /*  删掉数据库 test 里的所有数据  */
    await new SQLite("test").deleteAll()();
})();

(async function () {
    /*  删掉数据库 test 里所有 v2 是 114514 的数据  */
    await new SQLite("test").deleteBy("v2",114514)();
})();
<figure class="code-box" contenteditable="false"></figure>

记得关注+三连!

我在BOX3:http://box3.fun/u/3910493 及 http://box.game/u/10069

代码仅供学习及使用,禁止抄袭盗用

 


回复

上一页1 页 / 共 1下一页
星星上的雪花星星上的雪花

有个地方太忙了没写完注释,现在补上:
(测试数据库的)v1只能存储文本,v2只能存储整数

点赞0


评论


星星上的雪花星星上的雪花

顶!

点赞0


评论


浮生awa浮生awa

顶顶顶顶

点赞0


评论


_韩佳霖_韩佳霖

顶!

点赞0


评论


_韩佳霖_韩佳霖

顶!

点赞0


评论


_韩佳霖_韩佳霖

顶!

点赞0


评论


JSR代码喵JSR代码喵

点赞0


评论


小白一号Rua小白一号Rua

dddddddddd(早点发我就不用大费周章的研究了doge)

点赞0


评论


建议不测建议不测

box3.cod喵/e/2676629d8f87239f56e3?p=6L0bRtB6HS%2FQR4JjeSo4AYamseHHZmzujMLh6RbJ1lA%2BOAjQ3VLwVndWVzdA%3D%3D

点赞0


评论