易语言MySQL数据库操作实战:从连接到增删改查
1. 易语言与MySQL数据库初探
第一次接触易语言操作MySQL数据库时,我完全被那些专业术语吓到了。什么"数据库句柄"、"SQL语句"、"记录集",听起来就像天书一样。但实际用起来才发现,易语言已经把复杂的技术封装得非常友好,就像搭积木一样简单。这里我用最直白的语言,带你从零开始掌握这个实用技能。
易语言是国产编程语言中的"亲民派",特别适合开发Windows桌面应用。而MySQL作为最流行的开源数据库,两者结合能轻松搞定各种数据管理需求。比如做个学生成绩管理系统、小型进销存软件,或者个人记账工具,都是绝配。我去年就用这个组合给学校图书馆做了个借阅管理系统,3000多册图书数据稳稳当当。
要玩转这个组合,首先得准备好环境。MySQL社区版直接官网下载安装就行,记得勾选"添加环境变量"。易语言这边需要确认是否加载了mysql支持库,在菜单栏"工具"-"支持库配置"里勾选mysql.fne。如果找不到这个选项,可能需要单独下载支持库文件。我第一次就栽在这里,折腾半天才发现是易语言版本不匹配。
2. 建立数据库连接
2.1 基础连接操作
连接数据库就像打电话,得知道对方的号码(IP地址)、用户名和密码。易语言提供了连接MySql这个超级好用的命令,看这段代码:
.版本 2 .支持库 mysql .子程序 连接数据库 .局部变量 数据库句柄, 整数型 数据库句柄 = 连接MySql ("localhost", "root", "123456", "school", 3306) .如果真 (数据库句柄 = 0) 信息框 ("连接失败,请检查:\n1. MySQL服务是否启动\n2. 用户名密码是否正确\n3. 数据库是否存在", 0, "错误提示", ) 返回 (0) .如果真结束 返回 (数据库句柄)这里有几个实战经验分享:
localhost可以换成127.0.0.1,如果是远程数据库就填服务器IP- 3306是MySQL默认端口,如果修改过要对应调整
- 数据库句柄相当于连接凭证,后续操作都要用到
2.2 连接池优化技巧
实际项目中我发现频繁连接断开很耗资源,于是搞了个连接池方案。原理很简单:程序启动时建立连接,全程复用这个连接。就像去网吧包夜,一次性交钱随便玩,比按小时计费划算多了。
.版本 2 .程序集变量 全局_数据库句柄, 整数型 .子程序 __启动窗口_创建完毕 全局_数据库句柄 = 连接MySql ("localhost", "root", "123456", "school", 3306) .子程序 __启动窗口_将被销毁 断开MySql (全局_数据库句柄)注意要在程序退出时记得断开连接,否则会导致连接泄漏。我有次忘了写断开代码,第二天发现数据库连接数爆满,被DBA追着骂。
3. 数据增删改查实战
3.1 增:插入数据
往数据库添加记录就像填写表格,SQL语句就是我们的笔。易语言里可以用取文本函数动态拼接SQL:
.版本 2 .支持库 mysql .子程序 添加学生 .参数 姓名, 文本型 .参数 年龄, 整数型 .局部变量 SQL, 文本型 SQL = 取文本 ("insert into students (name, age) values ('%s', %d)", 姓名, 年龄) 执行SQL语句 (全局_数据库句柄, SQL)这里有个血泪教训:字符串值必须用单引号包裹,数字不用。我有次把年龄也加了引号,结果数据库里年龄全变成0,排查了半天才发现。
3.2 删:清理数据
删除操作要格外小心,没加条件会清空整张表!建议先用查询确认要删的记录:
.版本 2 .支持库 mysql .子程序 删除学生 .参数 学号, 文本型 .局部变量 SQL, 文本型 SQL = 取文本 ("delete from students where id='%s'", 学号) 执行SQL语句 (全局_数据库句柄, SQL)重要的事情说三遍:备份!备份!备份!有次我手滑把where条件写错了,瞬间删掉300多条记录,幸好有前一天备份。
3.3 改:更新数据
更新操作要注意条件精确,否则可能误改多条记录。比如修改学生信息:
.版本 2 .支持库 mysql .子程序 更新学生信息 .参数 学号, 文本型 .参数 新姓名, 文本型 .局部变量 SQL, 文本型 SQL = 取文本 ("update students set name='%s' where id='%s'", 新姓名, 学号) 执行SQL语句 (全局_数据库句柄, SQL)3.4 查:数据检索
查询是使用最频繁的操作,分精确查询和模糊查询两种。精确查询用等号,模糊查询用like配合通配符:
.版本 2 .支持库 mysql .支持库 spec .子程序 查询学生 .参数 关键词, 文本型 .局部变量 SQL, 文本型 .局部变量 记录集句柄, 整数型 .局部变量 姓名, 文本型 .局部变量 年龄, 整数型 SQL = 取文本 ("select * from students where name like '%%%s%%'", 关键词) 记录集句柄 = 取记录集 (全局_数据库句柄) .计次循环首 (取记录集行数 (记录集句柄), ) 读字段值 (记录集句柄, "name", 姓名) 读字段值 (记录集句柄, "age", 年龄) 调试输出 ("姓名:" + 姓名 + ",年龄:" + 到文本 (年龄)) 到下一行 (记录集句柄) .计次循环尾 () 释放记录集 (记录集句柄)注意模糊查询的通配符要用两个百分号,因为易语言里%是格式化字符。这个坑我踩过三次才长记性。
4. 实战案例:学生管理系统
现在我们把所有知识串起来,做个完整的学生信息管理模块。先设计数据库表结构:
CREATE TABLE students ( id VARCHAR(20) PRIMARY KEY, name VARCHAR(50) NOT NULL, gender CHAR(1), age INT, class VARCHAR(50) );4.1 添加学生功能
.版本 2 .支持库 mysql .子程序 添加学生 .参数 学号, 文本型 .参数 姓名, 文本型 .参数 性别, 文本型 .参数 年龄, 整数型 .参数 班级, 文本型 .局部变量 SQL, 文本型 SQL = 取文本 ("insert into students values ('%s','%s','%s',%d,'%s')", 学号, 姓名, 性别, 年龄, 班级) 执行SQL语句 (全局_数据库句柄, SQL)4.2 学生信息查询
支持按学号精确查询和按姓名模糊查询:
.版本 2 .支持库 mysql .支持库 spec .子程序 查询学生 .参数 查询类型, 整数型 ' 1-按学号 2-按姓名 .参数 查询内容, 文本型 .局部变量 SQL, 文本型 .局部变量 记录集句柄, 整数型 .判断开始 (查询类型 = 1) SQL = 取文本 ("select * from students where id='%s'", 查询内容) .默认 SQL = 取文本 ("select * from students where name like '%%%s%%'", 查询内容) .判断结束 记录集句柄 = 取记录集 (全局_数据库句柄) ' 处理查询结果...4.3 数据统计功能
比如统计各班级人数:
.版本 2 .支持库 mysql .支持库 spec .子程序 班级人数统计 .局部变量 SQL, 文本型 .局部变量 记录集句柄, 整数型 SQL = "select class, count(*) as num from students group by class" 记录集句柄 = 取记录集 (全局_数据库句柄) ' 处理统计结果...5. 避坑指南
5.1 SQL注入防范
直接拼接SQL有安全风险,比如用户输入' or '1'='1就会导致数据泄露。解决方法是用参数化查询:
.版本 2 .支持库 mysql .子程序 安全登录 .参数 用户名, 文本型 .参数 密码, 文本型 .局部变量 SQL, 文本型 .局部变量 记录集句柄, 整数型 SQL = "select * from users where username=? and password=?" 记录集句柄 = 取记录集 (全局_数据库句柄, SQL, 用户名, 密码)5.2 连接超时处理
网络不稳定时连接可能超时,需要增加重试机制:
.版本 2 .支持库 mysql .子程序 稳健连接 .局部变量 重试次数, 整数型 .局部变量 数据库句柄, 整数型 .判断循环首 (重试次数 < 3) 数据库句柄 = 连接MySql ("localhost", "root", "123456", "school", 3306) .如果真 (数据库句柄 ≠ 0) 跳出循环 () .如果真结束 延迟 (1000) ' 等待1秒 重试次数 = 重试次数 + 1 .判断循环尾 ()5.3 大数据量优化
当数据量超过万条时,查询会变慢。我常用的优化方法:
- 只查询需要的字段,避免
select * - 对常用查询条件建立索引
- 分页查询:
limit 10 offset 20
SQL = "select id,name from students where class='三年级' limit 100 offset 200"6. 调试技巧分享
6.1 SQL语句打印
执行SQL前先打印出来检查:
调试输出 ("即将执行的SQL:" + SQL) 执行SQL语句 (全局_数据库句柄, SQL)6.2 错误信息获取
MySQL执行出错时可以获取详细错误信息:
.版本 2 .支持库 mysql .子程序 获取错误信息 .局部变量 错误信息, 文本型 错误信息 = 取错误文本 (全局_数据库句柄) 信息框 (错误信息, 0, "数据库错误", )6.3 事务处理
多个操作要保持原子性时用事务:
.版本 2 .支持库 mysql 开始事务 (全局_数据库句柄) 执行SQL语句 (全局_数据库句柄, "update account set balance=balance-100 where id=1") 执行SQL语句 (全局_数据库句柄, "update account set balance=balance+100 where id=2") .如果 (提交事务 (全局_数据库句柄)) 信息框 ("转账成功", 0, , ) .否则 回滚事务 (全局_数据库句柄) 信息框 ("转账失败", 0, , ) .如果结束