Qt中整合MySQL,向MySQL中插入图片

来源:互联网 发布:wacom mac 绘画软件 编辑:程序博客网 时间:2024/05/01 13:17

Ubuntu中

Ubuntu10.10 Qt 4.7

安装MySQL

sudo apt-get install mysql-server

这个应该很简单了,而且我觉得大家在安装方面也没什么太大问题,所以也就不多说了,下面我们来讲讲配置。

配置MySQL

注意,在Ubuntu下MySQL缺省是只允许本地访问的,如果你要其他机器也能够访问的话,那么需要改变/etc/mysql/my.cnf配置文件了!下面我们一步步地来:

默认的MySQL安装之后根用户是没有密码的,所以首先用根用户进入:

$mysql -u root

在这里之所以用-u root是因为我现在是一般用户(firehare),如果不加-u root的话,mysql会以为是firehare在登录。注意,我在这里没有进入根用户模式,因为没必要。一般来说,对mysql中的数据库进行操作,根本没必要进入根用户模式,只有在设置时才有这种可能。

进入mysql之后,最要紧的就是要设置Mysql中的root用户密码了,否则,Mysql服务无安全可言了。

mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY "1";

要再登录,Terminal:mysql -u root -p

提示输入密码,输入1,回车;

create database Enroll;//创建数据库use Enroll;//使用数据库CREATE TABLE `Student` (          //建表  `Sno` char(9) NOT NULL,  `Sname` char(20) DEFAULT NULL,  `Ssex` char(1) DEFAULT NULL,  `Sage` int(11) DEFAULT NULL,  `Scome` char(20) DEFAULT NULL,  `classNo` char(5) NOT NULL,  UNIQUE KEY `Sno` (`Sno`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 


再用insert插入几组数据:

insert into Student values(“1”,“Jack”,“B”,“20”,“USA”,”244”);


数据库引擎的区别参考:http://www.jb51.net/article/38004.htm

qt中新建项目

#include "mainwindow.h"#include <QApplication>#include <QCoreApplication>#include <QDebug>#include <QtSql/QSqlDatabase>#include <QStringList>#include <QSqlQuery>int main(int argc, char *argv[]){  QCoreApplication a(argc, argv);    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");       db.setHostName("localhost");       db.setDatabaseName("enroll");       db.setUserName("root");       db.setPassword("vcc2014");       if(db.open())       {           QSqlQuery query;           query.exec("select * from student");           while(query.next())           {               int id = query.value(0).toInt();               QString str = query.value(1).toString();               qDebug() << id << "|" << str;           }           db.close();       }       else       {           qDebug() << "opened error";       }       return 0;       return a.exec();}


简单说明一下,qt4.7直接带了mysql的驱动,像上面那样声明一下就行了。还有一定要在.pro里写上qt+=sql。

Windows中

Windows 8.1 Qt 5.3 Mysql 5.6.22 Python 3.4.2

下载并安装Mysql。

下载并安装python。

启动Mysql

cd C:\Program Files\MySQL\MySQL Server 5.6\binmysql -u root -p

显示所有数据库:



将 D:\Qt\Qt5.3.2\5.3\msvc2013_64_opengl\plugins\sqldrivers\qsqlmysql.dll 拷贝到 D:\Qt\Qt5.3.2\5.3\msvc2013_64_opengl\bin 下面。(对应自己的安装目录进行修改)

将C:\Program Files\MySQL\MySQL Server 5.6\lib\libmysql.dll拷贝到 D:\Qt\Qt5.3.2\5.3\msvc2013_64_opengl\bin 下面。(对应自己的安装目录进行修改)

不然会报错:

QSqlDatabase: QMYSQL driver not loaded

测试代码和上面的一样。


向MySQL中插入图片有下面几点要注意:

1.写入时并无格式之分,只是保存二进制数据,读取后和写入时的格式一样。
jpg图片用二进制格式写入mysql,再以二进制格式读取,图片格式为jpg
gif图片用二进制格式写入mysql,再以二进制格式读取,图片格式为gif
...就是说与图片的格式无关。
2.图片用数据库保存,以文件方式保存这两种方式各有利弊。
3.mysql保存图片用BLOB类型。BLOB类型按可存储数据的大小分几种(详细看mysql help)。
4.如以文件方式保存,用某种配置文件保存路径为好,如注册表,ini文件等,可以灵活配置
图片路径.
强烈不建议用数据库存储图片在的路径!


这里用第一种方法,首先在数据库中插入列:

alter table student add image mediumblob;


这里用mediumblob,表示存储中等大小的图片。

存储函数

QPixmap image("xxx");QByteArray bytes;QBuffer buffer(&bytes);buffer.open(QIODevice::WriteOnly);image.save(&buffer, "PNG");QVariant imageData(bytes);QSqlQuery query;query.prepare("insert into studen (Sno, Sname, Ssex, Scome, classNo, image)"query.bindValue(0, 1);...query.bindValue(5, imageData);query.exec();

读取函数

query.exec("select * student");while (query.next()){QPixmap p;p.loadFromData(query.value(5).toByteArray(), "PNG");//Do some thing...}





原创粉丝点击