Y++ - MySQL数据库连接-实现分页读取数据到表格
Y++ - MySQL数据库连接-实现分页读取数据到表格
约 3511 字 · 9 分钟阅读
Y++ MySQL类支持MySQL版本:MySQL5、MySQL8,使用不同的版本依赖的DLL不一样,请在:IDE目录\libmysql 下查看,运行时一般会自动复制MySQL的DLL依赖到exe目录。
下面是实现代码:
整数 g_客户端版本 = 2
文本 g_库名 = "ypp_mysql_smoke"
文本 g_表名 = "用户"
MySQL类 g_db
逻辑 g_已连接 = 假
函数 追加行 (文本 s) {
输出框.加入文本(s + "\r\n")
输出(s)
}
函数 步骤 (文本 名, 逻辑 ok) 逻辑 {
如果 (ok) {
追加行("[OK] " + 名)
返回(真)
}
追加行("[FAIL] " + 名 + " → " + g_db.取错误())
返回(假)
}
函数 初始化表格 () {
表格用户.置列数(3)
表格用户.置表头(0, "id")
表格用户.置表头(1, "姓名")
表格用户.置表头(2, "年龄")
表格用户.置列宽(0, 72)
表格用户.置列宽(1, 220)
表格用户.置列宽(2, 100)
表格用户.置行数(0)
}
函数 加载当前页 () {
如果 (g_已连接 == 假) {
返回()
}
整数 size = 分页列表.取每页条数()
如果 (size < 1) {
size = 5
分页列表.置每页条数(5)
}
整数 page = 分页列表.取当前页()
如果 (page < 0) {
page = 0
}
整数 off = page * size
文本 sql = "SELECT id,姓名,年龄 FROM `" + g_表名 + "` ORDER BY id ASC LIMIT "
+ 到文本(size) + " OFFSET " + 到文本(off)
如果 (g_db.查询SQL(sql) == 假) {
追加行("[FAIL] 分页查询 → " + g_db.取错误())
返回()
}
整数 r = 0
表格用户.置行数(size)
当 (g_db.取下一行()) {
表格用户.置单元格(r, 0, 到文本(g_db.取整数("id")))
表格用户.置单元格(r, 1, g_db.取文本("姓名"))
表格用户.置单元格(r, 2, 到文本(g_db.取整数("年龄")))
r = r + 1
}
表格用户.置行数(r)
追加行("[页] 第" + 到文本(page) + "页 / 共" + 到文本(分页列表.取页数())
+ "页 · 本页" + 到文本(r) + "行 · 总" + 到文本(分页列表.取总条数()) + "条")
}
函数 刷新分页并加载 () {
如果 (g_已连接 == 假) {
返回()
}
整数 total = g_db.取行数(g_表名)
分页列表.置总条数(total)
如果 (分页列表.取每页条数() < 1) {
分页列表.置每页条数(5)
}
分页列表.置当前页(0)
加载当前页()
}
函数 跑冒烟 () {
输出框.文本 = ""
g_已连接 = 假
初始化表格()
追加行("=== MySQL8 冒烟开始(MySQL版本=2,默认) ===")
追加行("旁路应为 libmysql8.dll + plugin\\caching_sha2_password.dll 等。")
如果 (g_db.MySQL版本(g_客户端版本) == 假) {
追加行("[FAIL] MySQL版本 → " + g_db.取错误())
返回()
}
追加行("取MySQL版本=" + 到文本(g_db.取MySQL版本()) + " 客户端库=" + g_db.取客户端库())
如果 (g_db.置客户端库("libmysql5.dll") == 真) {
追加行("[WARN] 冲突自检未拦截(置客户端库(libmysql5) 在版本2 下应失败)")
} 否则 {
追加行("[OK] 冲突自检:" + g_db.取错误())
}
g_db.置客户端库("")
文本 host = 编辑主机.文本
整数 port = 到整数(编辑端口.文本)
文本 user = 编辑用户.文本
文本 pass = 编辑密码.文本
如果 (步骤("打开(无库名)", g_db.打开(host, port, user, pass, "", "utf8mb4")) == 假) {
返回()
}
文本 ver = g_db.取服务器版本()
追加行("服务器版本=" + ver)
如果 (寻找文本(ver, "5.") > 0) {
追加行("[提示] 客户端是 MySQL8 旁路,服务器却是 " + ver
+ "——协议常可通,但本机并非 MySQL 8 服务。要验 caching_sha2 请连真正的 8.x。")
}
如果 (步骤("CREATE DATABASE", g_db.执行SQL("CREATE DATABASE IF NOT EXISTS `" + g_库名 + "` DEFAULT CHARSET utf8mb4")) == 假) {
g_db.关闭()
返回()
}
如果 (步骤("选择库", g_db.选择库(g_库名)) == 假) {
g_db.关闭()
返回()
}
g_db.执行SQL("DROP TABLE IF EXISTS `" + g_表名 + "`")
字段信息 cols[3]
cols[0].名称 = "id"
cols[0].类型 = #主键
cols[1].名称 = "姓名"
cols[1].类型 = #文本
cols[2].名称 = "年龄"
cols[2].类型 = #整数
如果 (步骤("建表", g_db.建表(g_表名, cols)) == 假) {
g_db.关闭()
返回()
}
如果 (步骤("插入单行", g_db.插入(g_表名, "姓名,年龄", "李四,22")) == 假) {
g_db.关闭()
返回()
}
追加行("最后插入ID=" + 到文本(g_db.取最后插入ID()))
如果 (步骤("查询 年龄=22", g_db.查询(g_表名, "年龄=22")) == 假) {
g_db.关闭()
返回()
}
如果 (g_db.取下一行()) {
追加行("[OK] 读行 姓名=" + g_db.取文本("姓名") + " 年龄=" + 到文本(g_db.取整数("年龄")))
} 否则 {
追加行("[FAIL] 查询无行")
g_db.关闭()
返回()
}
如果 (步骤("更新 年龄=23", g_db.更新(g_表名, "年龄=23", "姓名=李四")) == 假) {
g_db.关闭()
返回()
}
如果 (步骤("删除 姓名=李四", g_db.删除(g_表名, "姓名=李四")) == 假) {
g_db.关闭()
返回()
}
g_db.查询(g_表名, "")
如果 (g_db.取下一行()) {
追加行("[FAIL] 删除后仍有行")
g_db.关闭()
返回()
}
追加行("[OK] 删除后表空")
文本 多行[] = []
整数 i
循环 (25, i) {
数组添加(多行, "用户" + 到文本(i + 1) + "," + 到文本(18 + i))
}
如果 (步骤("批量写入25行", g_db.批量添加(g_表名, "姓名,年龄", 多行)) == 假) {
g_db.关闭()
返回()
}
追加行("取行数=" + 到文本(g_db.取行数(g_表名)))
g_已连接 = 真
分页列表.置每页条数(5)
分页列表.置每页条数选项("5" + 编码字符(10) + "10" + 编码字符(10) + "20")
分页列表.置显示每页条数(真)
分页列表.置显示跳转(真)
刷新分页并加载()
追加行("[OK] 已写入表格;可点分页翻页 / 改每页条数")
追加行("=== MySQL8 冒烟完成(连接保持,便于分页) ===")
}
函数 换肤 (文本 主题文件) {
如果 (加载YSS(":/" + 主题文件) == 真) {
追加行("[皮肤] " + 主题文件)
返回()
}
如果 (加载YSS(主题文件) == 真) {
追加行("[皮肤] " + 主题文件 + "(相对路径)")
返回()
}
追加行("[FAIL] 换肤失败:" + 主题文件 + "(请确认 资源/ 已发布到 exe 旁)")
}
函数 主窗口.创建完毕 () {
初始化表格()
分页列表.置总条数(0)
分页列表.置每页条数(5)
分页列表.置当前页(0)
分页列表.置显示每页条数(真)
分页列表.置每页条数选项("5" + 编码字符(10) + "10" + 编码字符(10) + "20")
追加行("就绪:填连接信息后点「跑冒烟」。右侧可动态换肤(加载YSS)。本工程 MySQL版本(2)。")
}
函数 按钮冒烟.单击 (整数 X, 整数 Y) {
跑冒烟()
}
函数 按钮Marina.单击 (整数 X, 整数 Y) {
换肤("主题_Marina.yss")
}
函数 按钮Nebula.单击 (整数 X, 整数 Y) {
换肤("主题_Nebula.yss")
}
函数 按钮Graphite.单击 (整数 X, 整数 Y) {
换肤("主题_Graphite.yss")
}
函数 按钮Aurum.单击 (整数 X, 整数 Y) {
换肤("主题_Aurum.yss")
}
函数 按钮Verdant.单击 (整数 X, 整数 Y) {
换肤("主题_Verdant.yss")
}
函数 分页列表.当前页改变 (整数 当前值) {
加载当前页()
}
函数 分页列表.每页条数改变 (整数 当前值) {
如果 (g_已连接 == 假) {
返回()
}
分页列表.置当前页(0)
加载当前页()
}

还没有回复,来抢沙发吧。