1. 程式人生 > >Qt中整合MySQL,向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 [email protected] 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\bin
mysql -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...
}


相關推薦

Qt整合MySQLMySQL插入圖片

Ubuntu中Ubuntu10.10 Qt 4.7安裝MySQL sudo apt-get install mysql-server 這個應該很簡單了,而且我覺得大家在安裝方面也沒什麼太大問題,所以也就不多說了,下面我們來講講配置。 配置MySQL 注意,在Ubuntu下My

使用MySQL Workbench建立資料庫建立新的表新增資料

初學資料庫,記錄一下所學的知識。我用的MySQL資料庫,使用MySQL Workbench管理。下面簡單介紹一下如何使用MySQL Workbench建立資料庫,建立新的表,為表新增資料。 點選上圖中的“加號”圖示,新建一個連線, 如上圖,先輸入資料庫的賬號

Mysql亂碼問題; 在java資料庫插入資料出現亂碼

1.Mysql亂碼問題 產生亂碼的原因: 編碼和解碼不一致; 檢視字符集 `show variables like ‘character_set_%’; 發現聯結器connection的編碼是utf8,伺服器的編碼是latin1;將伺服器的編碼

Hibernate在MyEclipse的部署連線MySQL資料庫

如今,更多的人使用MyEclipse而不再使用eclipse,MyEclipse比eclipse的方便之處我就不說了,但MyEclipse不是免費的,我也是使用破解版的。 在MyEclipse中如何搭建hibernate環境呢?今天學習一點點想與

MySQL的bug:子查詢使用rand()上層查詢rand()的值被重算

  在使用mysql的過程中,發現了一個神奇的bug。   mysql語句如下: select random_val from (select floor(rand()*10) as random_val from Test) b where b.random_val

安裝解壓版本的MySQL安裝過程的常見命令檢查windows系統錯誤日誌的方式來檢查MySQL啟動錯誤關於Fatal error: Can't open and lock privilege

安裝mysql下載mysql-5.6.26-winx64,並解壓到:D:\Installed\mysql-5.6.26-winx64\mysql-5.6.26-winx64建立data目錄建立my.in

Spring整合Cage實現驗證碼功能

ger 類型 body match exce sub pom esp rec 1.pom.xml中添加Cage依賴。 <dependency> <groupId>com.github.cage</groupId

VS2013 c++連結資料庫應用儲存過程資料庫寫入資料

// ConsoleApplication1.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include "iomanip" using namespace std; #import "c:\Program Files\Common Files\S

SpringBoot整合mybatis及SpringBoot的junit測試

1、pom檔案中引入mybatis依賴:mybatis-spring-boot-starter 和mysql驅動依賴:mysql-connector-java,以及spring-boot-starter-test依賴用於junit測試        

jsp實現仿QQ空間新建多個相簿名稱相簿新增照片

工具:Eclipse,Oracle,smartupload.jar;語言:jsp,Java;資料儲存:Oracle。 實現功能介紹: 主要是新建相簿,可以建多個相簿,在相簿中新增多張照片,刪除照片,刪除相簿,當相簿下有照片時先刪除照片才能刪除相簿。 因為每個相簿和照片要有所

java/poi讀取word並替換word的文字內容word插入圖片的操作

先貼程式碼,注:部分程式碼源自網路其他前輩的文章,這裡只是做一個功能整合。 package fcjTool; import java.io.IOException; import java.io.InputStream; import org.ap

java日期計算後移動得到明天的日期

        Date date=new Date();//取時間        Calendar calendar =new GregorianCalendar();        calendar.setTime(date);        calendar.add(

Zuul整合Swagger2實現對源服務API測試

前言 我們知道,Swagger2整合到專案中,可以非常方便地進行介面測試,是前後端對接效率提高。現在,我們可以在Zuul中整合Swagger2,通過Zuul配置檔案配置的對映路徑,來生成源服務介面的測

C語言新建檔案檔案輸入內容並讀出檔案內容

三、格式化讀寫函式--fscanf( )函式和fprint( )函式 呼叫方式分別是: fscanf(檔案指標,格式字串,輸入表);fscanf 函式將指標指向的檔案內容,以格式符要求的形式,讀入記憶體指定地址內 fprintf(檔案指標,格式字串,輸出表);fprintf 函式是將記憶體指定地址內的內容

Redis 整合spring mysql的快取

專案環境: 在SpringMVC + MyBatis + Mysql。Redis部署在Linux虛擬機器。 1、整體思路 參考Ehcache實現MyBatis二級快取程式碼(Maven引用對應jar查閱)使用Spring管理Redis連線池模仿EhcacheCache

Java(向上下)造型造型和介面回撥的問題

最近回顧了一下java繼承中的問題,下面貼程式碼: package com.cc; /** * 目的:問題驗證,關於向上和向下造型過程中,檢測存在繼承關係的物件訪問關係。 * * * @

SQL SERVER 有一個表有自動增長的欄位插入值時怎麼辦

比如表 A 欄位有 id(自動增長) name age addrinsert into table values('','','') 這種寫法不管自動增長的欄位 直接從name欄位開始也可以明顯的表示insert into table(name,ag

根據字典值得大小對字典的項排序

lam and for 數據 bcd 參數 sorted imp abcde 案例1: 某班語文科目的成績以字典形式存儲,形式為:{"lili":89,"wenwen":91 ...} 根據成績高低,計算學生的排名 解決方案: 使用內置函數sorted 1,利用zip將

eclipse代碼有錯誤項目卻不顯示紅叉

tails pen ces style pos mpi btn project trac ***修改eclipse 代碼提示級別1.單個項目修改項目上右鍵-->properties-->java compiler-->building-->enabl