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

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 
#include 
#include 
#include 
#include 
#include 

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\bin
mysql -u root -p

显示所有数据库:

Qt中整合MySQL,向MySQL中插入图片_第1张图片


将 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...
}





你可能感兴趣的:(Qt)