YStudio Y++

MySQL类

Y++ / YStudio 开发文档 · 一点滴

扩展类(不是扁平命令库)。路径:支持库 → 扩展支持库 → MySQL类。类型名必须写 MySQL类(也接受 MYSQL类)。

高阶方法尽量不手写 SQL;需要时用 执行SQL / 查询SQL

运行时动态加载 libmysql.dll(不静态链入)。使用本类时,YStudio 编译/发布会按工程架构自动把 DLL 拷到 exe 旁(源:redist/libmysql/{x86|x64} 或仓库 third_party/libmysql/...)。也可 置客户端库 手动指定。

相关:SQLite类取程序平台打包发布

快速开始

函数 主窗口.创建完毕 () {
    MySQL类 db
    db.置连接超时 (15)
    如果真 (db.打开 ("127.0.0.1", 3306, "root", "pass", "demo") == 假) {
        输出 (db.取错误 ())
        返回
    }
    输出 (db.取服务器版本 ())

    字段信息 cols[3]
    cols[1].名称 = "id"
    cols[1].类型 = #主键
    cols[2].名称 = "姓名"
    cols[2].类型 = #文本
    cols[3].名称 = "年龄"
    cols[3].类型 = #整数
    db.建表 ("人", cols)

    db.插入 ("人", "姓名,年龄", "张三,20")
    db.查询 ("人", "年龄=20")
    当 (db.取下一行 ()) {
        输出 (db.取文本 ("姓名") + " " + 到文本 (db.取整数 ("年龄")))
    }
    db.关闭 ()
}

libmysql.dll 与打包

架构 仓库路径 IDE 发行包路径
x86 third_party/libmysql/x86/libmysql.dll redist/libmysql/x86/
x64 third_party/libmysql/x64/libmysql.dll redist/libmysql/x64/
  • F5 / 发布:工程模块含 mysql 时,自动拷贝与工程架构一致的 DLL 到编译缓存目录与 发布/{arch}/{cfg}/
  • 打包到文件夹:同样检测;若发布目录已有 DLL 也会一并带上。
  • 勿混用架构(x64 exe + x86 DLL → 无法加载)。

MySQL 8

默认认证 caching_sha2_password:仓库自带的 Connector/C 6.1.11 可能握手失败 → 用户改 mysql_native_password,或换成与服务器同代的官方 libmysql.dll(覆盖 redist/third_party 对应架构即可)。

字段信息与类型常量

常量在 MySQL类/常量 节点:

常量 MySQL
#文本 1 VARCHAR(255)
#整数 2 INT
#小数 3 DOUBLE
#逻辑 4 TINYINT(1)
#二进制 5 BLOB
#主键 6 INT AUTO_INCREMENT PRIMARY KEY
#日期时间 7 DATETIME
#日期 8 DATE
#时间 9 TIME
#长文本 10 LONGTEXT

建表默认 ENGINE=InnoDB DEFAULT CHARSET=utf8mb4(事务才有效)。

打开与连接

db.置连接超时 (10)          // 默认秒数;0=不限制
db.打开 ("127.0.0.1")       // 端口 3306,字符集 utf8mb4
db.打开 ("127.0.0.1", 3306, "root", "pass", "demo", "utf8mb4", 20)  // 单次超时 20 秒
db.选择库 ("demo")
输出 (db.取服务器版本 ())
输出 (db.取客户端库 ())

条件风格

与 SQLite 相同:列运算符值 或文本数组(AND)。

db.查询 ("user", "id=1")
db.查询 ("user", ["id=1", "age=20"])
db.更新 ("user", "年龄=21", "姓名=张三")
db.删除 ("user", "姓名=张三")

批量添加(动态行)

第三参为文本数组,每个元素一行 CSV(列与第二参对应)。行数不必事先固定:用空数组 + 数组添加 边采集边攒,再一次写入。

文本 行[] = []
// 网页采集循环里:
数组添加(行, 标题 + "," + 价格 + "," + 链接)
数组添加(行, 另一行CSV)
如果 (数组是否为空(行) == 假) {
    db.批量添加("商品", "标题,价格,链接", 行)
}

也可用字面量:db.批量添加("商品", "标题,价格", ["A,1", "B,2"])
内部走事务;任一行失败会回滚。旧名 插入批量 仍可用。

注意:CSV 值里若含逗号,请先自己拼好转义或改用循环 插入 / 执行SQL

方法 说明
置客户端库 / 取客户端库 DLL 路径
置连接超时 / 取连接超时 默认连接超时(秒)
打开(..., [超时秒=-1]) 连接;-1=用默认超时
关闭 / 是否打开 / 选择库 / 检测连接 连接管理
取服务器版本 服务器版本串
建表 / 删表 / 清空表 / 表是否存在 / 字段是否存在 结构
插入 / 忽略插入 / 替换插入 / 批量添加 写入(旧名「插入批量」仍可用)
更新 / 删除 无 SQL 写
查询 + 取下一行 + 取文本/整数/小数 游标读
取列数 / 取列名 / 取行数 元数据
转义文本 SQL 转义(高级)
执行SQL / 查询SQL 原生 SQL
开始事务 / 提交 / 回滚 事务
取最后插入ID / 取影响行数 / 取错误 诊断

与取程序平台

取程序平台()(系统库)返回 3264,表示当前程序位数。
若编译报「运行时库版本不一致」,多为诊断把中文 C3861 找不到标识符 误映射;请确认 IDE 旁 templates/ypl_runtime/libslib/ 同步(开发版会嵌套同步头文件)。与 MySQL DLL 架构选择无关时,也可不依赖该 API,改由 IDE 自动附带 DLL。

打包与 DLL

  1. 发行包须含 redist/libmysql/x86x64sync_dist_ide.ps1 / stage_dev_pack.ps1 已拷贝)。
  2. 用户工程用了 MySQL类 → 发布目录自动出现 libmysql.dll
  3. 手工第三方 DLL 仍可放「资源」;MySQL 官方客户端属 Y++ 内置依赖,不必再手动拷。

注意

  • 类型名必须是 MySQL类
  • 未使用本类时不链 ypl_lib_mysql.lib
  • 签名以 IDE 支持库 → MySQL类 为准。

代码补全(全拼 / 简拼 / 双拼)

编辑器对中文方法名自动生成拼音键;类名另有别名:

名称 常用简拼
MySQL类 mysqll / mysqllei
创建MySQL cjmysql
批量添加 pltj
打开 dk
取服务器版本 qfwqbb
忽略插入 hlcr
置客户端库 zkhdk

db. 后输入简拼即可过滤方法。详见 README 补全提示