近期做个实验管理系统,matlab新版UI界面交互式相对还算友好,初学mysql,之前没接触过数据库,做个记录。
一、环境安装
1.确保matlab安装了database toolbox,可以通过ver命令查询;
2.下载合适的mysql版本,进入mysql官网,往下一直拉,有个选项“MySQL Community (GPL) Downloads »”->选择MySQL Installer for Windows->版本选择8.035(选个新的版本,不过选哪个都行),下载安装即可;
3.下载数据库管理软件DBeaver,选个免费版的用着就行,安装时候选择exe程序安装能有中文版,不然选个英文版也行,安装过DBeaver后,打开软件,数据库->找到Mysql进行连接,中间需要下载驱动程序,一并下载了(注意这个驱动,驱动版本很重要,DBeaver默认的驱动显然是好的,点击数据库->驱动管理器-mysql->库可以看到当前mysql的驱动,截止到文章写时候我用的驱动是8.0.29);
4.下载并安装驱动,通过https://mvnrepository.com/artifact/mysql/mysql-connector-java这个网站下载驱动,下载后,把驱动放置在matlab的toolbox下面的文件夹中,不过位置无所谓,和路径对应上即可,可以放置以下文件夹中D:\install\matlab\toolbox\local,然后在这个文件夹中找到classpath.txt文件,打开,在最后一行添加$matlabroot/toolbox/local/mysql-connector-java-8.0.29.jar,关闭关闭并重启matlab。至此,配置已全部结束,可以进行操作了,可以直接看第四部分,实例分析。
二、设置参数,连接到数据库(这块尝试不少次才成功)
1.常用的连接参数如下所示,其中dbname如果刚开始建立数据库时没有可以不用写,以''替代;password是安装Mysql时候填写的密码,一般都是自己设置;dbport在Mysql中默认的是3306。
dbhost = 'localhost'; % 数据库主机名
dbport = 3306; % 数据库端口号
dbname = 'test'; % 数据库名称
username = 'root'; % 数据库用户名
password = 'xxx'; % 数据库密码
2.创建数据库连接对象
% 创建数据库连接对象
conn = database('', username, password, 'Vendor', 'MySQL', 'Server', dbhost, 'Port', dbport);
需要说明的是目前数据库并未指定具体的数据库名称,可以随后创建
3.测试数据库是否连接成功
if isopen(conn)
disp('成功连接到数据库!');
else
error('无法连接到数据库。');
end
4.在确认数据库连接成功后,假设要创建名为"my_database"的数据库
create_query = 'CREATE DATABASE IF NOT EXISTS my_database;';
exec(conn, create_query);
conn1=database('my_database', username, password, 'Vendor', 'MySQL', 'Server', dbhost, 'Port', dbport);
三、数据库的增删
数据库增加的格式采用exec(conn,sql语句)格式,如 exec(conn, 'insert into test values(''3'',''李五'')'),增添操作的SQL语句为 insert into 表 values("",""),在进行完操作后,我们重新查看MySQL数据库,观察增添操作是否成功。
数据库进行修改操作,也就是所谓的更新操作,这里我们所使用的SQL语句为update(conn,'test',{'ID'},5,'where name=''赵四'''),其中的conn可以视为我们这次操作的全局变量,这个语句的意思是,将name为赵四的ID更新为5,其中的ID和name都是user表中的列变量,其中ID为主键。我们执行完该操作后,查询数据库。
进行数据库删除操作,也就是从数据库的user表中,删除某行数据,这里删除的SQL语句为
curs = exec(conn,'delete from test where ID = ''5''') 里面具体的限制条件,在where之后,可以自己设定,这里我们设定的是删除在数据库user表中ID为5的数据。
这一块参考:MATLAB对MySQL数据库进行增删改查_51CTO博客_mysql数据库增删改查
1.数据库的增加可以参照2.4操作即可,数据库的删除可以采用以下语句
% 假设要删除名为"my_database"的数据库
drop_query = 'DROP DATABASE IF EXISTS my_database;';
exec(conn, drop_query);
2.数据内容的增删
try
% 随意给定个数据源
data_source = struct('country', {'China', 'United States', 'Germany', 'India'}, ...
'city', {'Beijing', 'New York', 'Berlin', 'Delhi'}, ...
'school', {'Tsinghua University', 'Harvard University', 'Technical University of Munich', 'Indian Institute of Technology'}, ...
'class', {'Physics', 'Computer Science', 'Engineering', 'Mathematics'});
% 创建表格
exec(conn, 'CREATE TABLE IF NOT EXISTS my_table0 (id INT PRIMARY KEY AUTO_INCREMENT, country VARCHAR(255), city VARCHAR(255), school VARCHAR(255), class VARCHAR(255));');
% 假设data_source是包含了国家、城市、学校和班级数据的数据源
% 如果有外部数据库的话,采用这种插入方法
for i = 1:length(data_source)
% 提取国家、城市、学校和班级数据
country = data_source(i).country;
city = data_source(i).city;
school = data_source(i).school;
class = data_source(i).class;
% 插入数据到表格中
insert_query = sprintf('INSERT INTO my_table0 (country, city, school, class) VALUES (''%s'', ''%s'', ''%s'', ''%s'')', country, city, school, class);
exec(conn, insert_query);
end
disp('数据已成功插入数据库。');
% 如果一个个插入的话,应该怎么操作呢?
% 假设要删除国家为China的记录
delete_query = 'DELETE FROM my_table0 WHERE country = "China";';
exec(conn, delete_query);
disp('数据删除成功。');
% 加入要删除表格my_table
% 假设要删除名为"my_table"的表格
drop_query = 'DROP TABLE IF EXISTS my_table;';
exec(conn, drop_query);
disp('表格删除成功。');
catch exception
error(['发生错误:', exception.message]);
end
四、实例分析
% 设置数据库连接参数
dbhost = 'localhost'; % 数据库主机名,设为本地主机
dbport = 3306; % 数据库端口号
dbname = 'lab'; % 数据库名称
username = 'root'; % 数据库用户名
password = 'xxx'; % 数据库密码
% 创建数据库连接对象
conn = database(dbname, username, password, 'Vendor', 'MySQL', 'Server', dbhost, 'Port', dbport);
% 创建表格
exec(conn, ['CREATE TABLE IF NOT EXISTS lab_test1(id INT AUTO_INCREMENT PRIMARY KEY, time_ VARCHAR(255),' ...
' name_ VARCHAR(255), source_ VARCHAR(255), number_ VARCHAR(255),type_ VARCHAR(255),belong_ VARCHAR(255),' ...
'who_ VARCHAR(255),position_ VARCHAR(255));']);
% 数据库插入采用 exce(conn,sql语句)格式
if isopen(conn)
disp('成功连接到数据库!');
% 数据库删除操作
exec(conn,'delete from lab_test1 where id="12"');
% 数据库增加操作
exec(conn,'insert into lab_test1(time_,name_,source_,number_,type_,belong_,who_,position_) values("2023-11-14", "xiaozhang","nafei","20","wu","小明","左1","22")');
% 数据库查找操作
data=fetch(exec(conn, 'SELECT * FROM lab_test1'));
data.Data
% 数据库修改操作
% update(conn,tablename,colnames,data,whereclause)
update(conn,'lab_test1',{'number_'},{'21'},'where number_=20')
else
error('无法连接到数据库。');
end
close(conn)