易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

批量sql解析为数组   [复制链接]

    2019-03-06 09:59:32
    进阶教程源码
    易语言资源网
    1923 次浏览
    来源链接

批量sql解析为数组, SQL终结符解析

前段时间在写一个服务端程序的时候,需要用到mysql.

客户端连接服务端执行sql分好几种情况, { 查询SQL, 执行SQL, 执行SQL事务, 批量执行支持, 查询执行混合 } ...

其中的"批量执行"就有点让我头疼, 玩过sql的都知道, 批量执行一般以";" 终结符算一条sql语句, 以此分割.

难点就是把批量的sql语句, 分割为单条, 一个一个的执行.估计有的易友可能想到了"分割文本, 发送文本数组"

首先"发送文本数组", 我不喜欢,有时候显得麻烦.

其次"分割文本", 你可能会遇到这样以下这样的情况, 也就是sql字符串中出现了";", 你能怎么办? 你也很绝望对吧?

INSERT INTO `User`(name) values('剑''齿;虎');SELECT LAST_INSERT_ID();

以上问题还有, 字符串中包含单引号就需要用两个单引号表示....


实在不想屈服于前面两种蛋疼的方式,试着自己封装子程序解析, 忽略字符串什么的. 有时候脑子是个好东西,可惜我好像没有似的... 感觉设计起来还挺复杂麻烦的,我没学过什么脚本设计,编译设计的.

于是前段时间论坛有几个帖子被顶起来了,一个叫"无间酱"的大佬制作了好几个练手的脚本语言设计,

我灵机一动...脚本也会遇到这样的问题, 就把源码中的解析终结符部分给抠出来了...总算说到重点了.

刚开始还不能直接用, 改了改还算可以了.

INSERT INTO User (name,pwd) values('剑齿虎;哇', 'aabb');--注释A:插入语句--
SELECT * FROM User; /*注释B:查询*/
UPDATE User SET pwd='ac''c' WHERE uid=1


结果:
数组:3{
  “INSERT INTO User (name,pwd) values('剑齿虎;哇', 'aabb');”,
  “--注释A:插入语句-- SELECT * FROM User;”,
  “/*注释B:查询*/ UPDATE User SET pwd='ac''c' WHERE uid=1”
}

感觉瞬间正规了许多, 不用去使用那些"偏方", 导致出现各种各样的杯具

image.png



点我下载 (已有 69 次下载)

引用模块





引用支持库


源码文件名 支持库文件名 支持库标识
批量SQL语法解析到数组.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0
解析练习3_条件流程.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0


[错误报告]   上一篇:易语言调用C#.Net编译的DLL例子...     下一篇:在线更新程序开源...