mysql 插入图片报错_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

显示所有数据库:

1e584a06a65f430785b627b5d753c816.png

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

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值