Qt连接MySQL编程及数据库性能调优(一)

版权声明: https://blog.csdn.net/guimaxingtian/article/details/82908067

之前整理过一篇Qt下数据库编程基础 :最近在进行单元测试,所以把遇到的一些问题整理出来,主要是关于数据库的

1.远程连接数据库

连接语句是:
mysql -h 192.168.xx.xx(IP地址) -P 3306(端口) -u remoteuser(登录用户名) -p(按回车输入密码)。
在连接之前首先要在远端配置一下,我使用的是添加授权用户的方法:
下面是允许任意ip地址进行连接,用户名:remoteuser,密码:password:
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘remoteuser’@’%‘IDENTIFIED BY ‘password’ WITH GRANT OPTION;
下面是指定ip为192.168.10.33的主机才能连接到mysql服务器:
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@‘192.168.10.33’IDENTIFIED BY ‘password’ WITH GRANT OPTION;
使授权生效:
mysql>FLUSH PRIVILEGES
可以参考这篇讲远程连接数据库的文章
这些都做好之后还要注意一点防火墙相关的问题,我把MySQL布在了Linux系统上,刚开始的时候试了重启数据库都提示无法连接,后来发现是自己的防火墙没有设置,下面是防火墙的设置:
sudo ufw allow 3306 (允许外部访问3306端口)
sudo ufw enable(开启防火墙)
sudo ufw default deny(禁止外部访问)
sudo ufw status(查看防火墙状态)
之后再连接就可以了。
在mac系统下,需要先创建表然后再授权,见这篇文章:mac开启mysql远程连接
CREATE USER ‘username’@’%’ IDENTIFIED BY ‘password’;
grant all privilages on *.* to ‘username’@’%’ with grant option;
然后重启mysql服务即可

2.插入数据速度优化

用Qt编写的插入接口是用的QSqlTableModel,每插入一条数据就进行一次提交,刚开始的时候觉得不会有太大问题,但测试的时候发现插入一条数据大概要40ms的样子,这样显然是不够的,于是查了资料,说是要用事务,于是改成先transaction后commit,插入数据也换成了用SQL语句的方法,发现速度并没有快多少,于是又查了数据库相关的资料,详见这篇文章,发现由于用的是InnoDB引擎,默认是会autocommit的,所以速度才没什么提升,所以在配置文件里加了一句autocommit = 0。速度马上就提上去了。但是我发现autocommit设为0之后,qt的commit函数就不起作用了。我使用的是Qt5.10,测试下来好像这里的transaction和commit对本地数据库还是起作用的,但对远程连接数据库就不起作用了,不知道是不是哪里做的不对,最后还是执行的语句set autocommit=0,可以正常使用。

猜你喜欢

转载自blog.csdn.net/guimaxingtian/article/details/82908067