1. 程式人生 > >資料庫SQLite在Qt5+VS2012使用規則總結---中文亂碼

資料庫SQLite在Qt5+VS2012使用規則總結---中文亂碼

複製程式碼
  1 #include <QtWidgets/QApplication>
  2 #include <QtCore>
  3 #include <QTextCodec>
  4 #include <QSqlDatabase>
  5 #include <QMessageBox>
  6 #include <QSqlQuery>
  7 #include <QTime>
  8 #include <QSqlError>
  9 #include <QSqlDriver>
 10 #include <QSqlRecord>
 11
#include <QtDebug> 12 13 14 int main(int argc, char *argv[]) 15 { 16 QApplication a(argc, argv); 17 18 QFile::remove("qtDB.db"); //it's very necessary to testing many times! 19 20 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 21 db.setHostName("easybook-3313b0
"); //設定資料庫主機名 22 db.setDatabaseName("qtDB.db"); //設定資料庫名,setHostName/setDatabaseName/setUserName/setPassword是非必須的 23 //因為在Qt中,由於QSQLITE資料庫驅動對應的SQLite資料庫是一種程序內的本地資料庫,無需資料庫名、使用者名稱、密碼、主機名和埠等特性 24 db.setUserName("zhouhejun"); //設定資料庫使用者名稱 25 db.setPassword("
123456"); //設定資料庫密碼 26 db.open(); //開啟連線 27 28 //建立資料庫表automobile1------一個數據庫中可以建立多個互不重名的資料庫表 29 QSqlQuery query1; 30 bool success1 = query1.exec("create table automobile1(id int primary key,attribute varchar(100),type varchar(100),kind varchar(100),nation int,carnumber int,elevaltor int,distance int,oil int,temperature int)"); 31 32 if (success1) 33 qDebug() <<"Create automobile1 Successful"; 34 else 35 qDebug() <<"Create automobiles1 Fail"; 36 37 //建立資料庫表automobile 38 QSqlQuery query; 39 bool success = query.exec("create table automobile(id int primary key,attribute varchar(100),type varchar(100),kind varchar(100),nation int,carnumber int,elevaltor int,distance int,oil int,temperature int)"); 40 41 if (success) 42 qDebug() << "Create automobile Successful"; 43 else 44 qDebug() << "Create automobiles Fail"; 45 46 //查詢 47 query.exec("select * from automobile"); 48 QSqlRecord rec = query.record(); 49 qDebug() << "automobile records' num:" << rec.count(); 50 51 //插入記錄 52 QTime t; 53 t.start(); 54 55 //像這種帶有string型別的table,進行插入元組時,應帶有QString::fromLocal8Bit("insert into...")才能保證正確顯示. 56 //元組0中因為沒有加QString::fromLocal8Bit(...),所以string型別顯示不全或亂碼 57 success = query.exec(("insert into automobile values( 0, '四輪','轎車','富康',123,123,123,123,123,123)")); 58 if (!success) 59 { 60 QSqlError lastError = query.lastError(); 61 qDebug() << lastError.driverText() << "insert row 0 failed"; 62 } 63 64 //元組1中的string型別均可顯示成功 65 //值得注意的是,如果直接使用這種query.exec(...)進行插入元組時,裡面所有的列元素必須是確定的,可以帶有計算,但不能帶入函式 66 success = query.exec(QString::fromLocal8Bit("insert into automobile values( 1, '四輪','轎車','富康',(6+6)*12/3,123,123,123,123,123)")); 67 if (!success) 68 { 69 QSqlError lastError = query.lastError(); 70 qDebug() << lastError.driverText() << "insert row 1 Failed"; 71 } 72 73 //元組2插入失敗 74 success = query.exec(QString::fromLocal8Bit("insert into automobile values( 2, '四輪','轎車','富康',rand() % 100 ,123,123,123,123,123)")); 75 if (!success) 76 { 77 QSqlError lastError = query.lastError(); 78 qDebug() << lastError.driverText() << "insert row 2 Failed"; 79 } 80 81 //如果直接使用這種query.exec(...)進行插入元組時,id/nation等int型別的資料,則必須是具體已確定的數值,而不能用變數進行替代; 82 //元組3插入失敗 83 int fourthRowId = 3; 84 success = query.exec(QString::fromLocal8Bit("insert into automobile values(fourthRowId, '四輪','轎車','富康',123,123,123,123,123,123)")); 85 if (!success) 86 { 87 QSqlError lastError = query.lastError(); 88 qDebug() << lastError.driverText() << "insert row 3 Failed"; 89 } 90 91 //同上,元組4插入失敗 92 int thirdRowNation = rand() % 100; 93 success = query.exec(QString::fromLocal8Bit("insert into automobile values( 4, '四輪','轎車','富康',thirdRowNation,123,123,123,123,123)")); 94 if (!success) 95 { 96 QSqlError lastError = query.lastError(); 97 qDebug() << lastError.driverText() << "insert row 4 Failed"; 98 } 99 100 //另外一種query.exec();可以通過query.prepare()進行預插值,然後通過query.bindValue(...)進行資料繫結, 101 //這種方式更加隨性一些,因為插入元組的列元素可以是變數,也可以是符合條件的函式 102 query.prepare(QString::fromLocal8Bit("insert into automobile values(?,?,?,?,?,?,?,?,?,?)")); 103 int records1 = 10; 104 for (int i = 0; i < records1; i++) 105 { 106 107 query.bindValue(0, i+5); ////ok, 可以正確顯示 108 query.bindValue(1, "四輪"); //完全顯示不出來 109 query.bindValue(2, QString::fromLocal8Bit("轎車")); //ok,可以正確顯示 110 query.bindValue(3, '富康'); //單引號,可以顯示,但是顯示錯誤 111 query.bindValue(4, (6+8)*12/4); //顯示42,ok,可以正確顯示 112 query.bindValue(5, rand() % 10000); //ok, 可以正確顯示 113 query.bindValue(6, rand() % 300); 114 query.bindValue(7, rand() % 200000); 115 query.bindValue(8, rand() % 52); 116 query.bindValue(9, rand() % 100); 117 118 success = query.exec(); 119 if (!success) 120 { 121 QSqlError lastError = query.lastError(); 122 qDebug() << lastError.driverText() << "insert row " << i + 5 << "Failed"; 123 } 124 } 125 qDebug() << "first insert " << records1 << " records, time:" << t.elapsed() << " ms"; 126 127 128 129 130 //query.prepare(QString::fromLocal8Bit("insert into automobile values(?,?,?,?,?,?,?,?,?,?)"))中的QString::fromLocal8Bit在此沒有作用,可以不加 131 query.prepare(("insert into automobile values(?,?,?,?,?,?,?,?,?,?)")); 132 133 long records2 = 10; 134 for (int i = 0; i < records2; i++) 135 { 136 137 query.bindValue(0, i + records1 + 5); 138 query.bindValue(1, QString::fromLocal8Bit("四輪")); 139 query.bindValue(2, QString::fromLocal8Bit("轎車")); 140 query.bindValue(3, QString::fromLocal8Bit("富康")); //結合以上可以看出,在當前環境下,使用字串顯示中文,需在中文字元的外面加上QString::fromLocal8Bit 141 query.bindValue(4, rand() % 100); 142 query.bindValue(5, rand() % 10000); 143 query.bindValue(6, rand() % 300); 144 query.bindValue(7, rand() % 200000); 145 query.bindValue(8, rand() % 52); 146 query.bindValue(9, rand() % 100); 147 148 success = query.exec(); 149 if (!success) 150 { 151 QSqlError lastError = query.lastError(); 152 qDebug() << lastError.driverText() << "insert row" << i + records1 + 5 << "Failed"; 153 } 154 } 155 156 qDebug() << "second insert " << records2 << " records, time:" << t.elapsed() << " ms"; 157 158 db.close(); 159 160 return a.exec(); 161 }
複製程式碼

相關推薦

資料庫SQLite在Qt5+VS2012使用規則總結---中文亂碼

1 #include <QtWidgets/QApplication> 2 #include <QtCore> 3 #include <QTextCodec> 4 #include <QSqlDatabase> 5 #include &l

mysql資料庫匯入.sql檔案,中文亂碼解決

方法一: 通過增加引數 –default-character-set = utf8 解決亂碼問題 mysql -u root -p password < path_to_import_file –default-character-set = utf8 方法二: 在命令列匯入亂碼解

jsp中向資料庫中插入資料及中文亂碼問題

首先附上最剛開始的程式碼,功能是向資料庫中插入資料,資料庫中的屬性如下: <% String action = request.getParameter("action"); //表單中提交過來的資料。 if(action != null &&

資料庫編碼錯誤導致儲存中文亂碼

資料庫中執行語句:show variables like ‘character%’; 檢視編碼格式,注意character_set_database和character_set_server是否為ut

資料庫中文亂碼解決方案總結,tomcat+mysql+hibernate

我的開發環境是eclipse+tomcat+mysql+hibernate,資料落地時發現中文都成了?,網上一搜,原因有很多,這邊總結下,大家碰到可以按著一一排查: 一般編碼都會常用UTF-8編碼 1. 資料庫編碼 檢視mysql資料的的編碼,確實是utf-8 如

解決Struts中文亂碼問題總結

servlet vax align url conn throws 當前 報錯 思想 在進行struts開發的過程中。總也是出現非常多的亂碼問題,但歸根究竟,也僅僅是下面三種情況: ㈠頁面顯示中文亂碼 ㈡傳遞參數中文亂碼 ㈢國際化資源文件亂碼

graphviz畫圖與中文亂碼等問題總結

pre 字體 自動 軟件 總結 中文 xxx color 描述 最近想寫一些文檔,畫一些程序的邏輯圖,用了vision,markdown等軟件感覺不怎麽好用,於是找到graphviz,這款強大的軟件。下面介紹一些入門,還有自己在用的過程中遇到的問題 1、中文亂碼的問題。 采

重慶校區WEB中文亂碼總結

gdi com 5% ive 重慶 auto nsh ans aio %E5%93%88%E5%93%88%E7%BB%88%E4%BA%8E%E5%AD%A6%E4%BC%9A%E8%80%81%E5%B8%88%E6%8A%BD%E6%9F%A5%E4%BA%A4%E4

URL中文引數往資料庫中存資料時發生亂碼

解決方法:在tomcat_home\conf\server.xml 中的Connector元素中設定URIEncoding屬性為合適的字元編碼 <Connector port="8080" protocol="HTTP/1.1" connectionTime

Java web 中的中文亂碼問題總結

一、亂碼由來:        大家都知道一句話:“亂碼是因為編碼和解碼方式不一致造成的”。 那麼,我們為什麼要編碼呢?        那就要從計算機底層是如何表示人類語言(

匯入資料到Oracle資料庫出現中文亂碼

在執行匯入sql指令碼時,把資料匯入到資料庫出現亂碼,以下是解決方案 問題:出現匯入 sql 的亂碼問題,plSQL Developer 沒有指定字符集解決:設定環境變數NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK 設定環境變數後登陸plSQL D

使用jdbc連線資料庫中文亂碼問題

     今天在學習jdbc時做了一個專案,專案主要實現的功能是通過jdbc連線資料庫,進行新增和查詢圖書館書籍。過程中遇到了新增中文到資料庫的亂碼問題,跟大家分享一下解決方案: 一.新增的時候是否有報錯(沒有的話直接繞道到二)     如果

Spring Boot JPA MySQL 入庫MySQL資料庫中文亂碼的解決辦法

問題表述:        上篇部落格中抒寫了Spring Data Jpa實體類自動建立資料庫表失敗解決即原因(踩過的坑),接著在操作JPA插入資料進資料庫時,發現數據庫的值為中文亂碼(??),需要注意一下的配置點,所以記錄一下,希望能幫到大家(#^.^#

mysql是我們專案中非常常用的資料型資料庫。但是因為我們需要在資料庫儲存中文字元,所以經常遇到資料庫亂碼情況。下面就來介紹一下如何徹底解決資料庫中文亂碼情況。

mysql是我們專案中非常常用的資料型資料庫。但是因為我們需要在資料庫儲存中文字元,所以經常遇到資料庫亂碼情況。下面就來介紹一下如何徹底解決資料庫中文亂碼情況。 1、中文亂碼 1.1、中文亂碼 create table user(name varchar(11)); # 建立user表

python發郵件總結及例項說明,中文亂碼已解決(在最後一個模組)

python發郵件需要掌握兩個模組的用法,smtplib和email,這倆模組是python自帶的,只需import即可使用。smtplib模組主要負責傳送郵件,email模組主要負責構造郵件。 smtplib模組主要負責傳送郵件:是一個傳送郵件的動作,連線郵箱伺服器,登入郵箱,傳送郵件(有發件

Navicat修改mysql資料庫中文亂碼問題

步驟1:開啟navict,連線你的mysql資料庫 第二步:新建資料庫。選擇連線,右鍵選擇新建資料庫 選擇:utf8 -- UTF-8 Unicode 再選擇:utf8_general_ci 第3步:新建表,每個欄位同樣選擇utf-

解決windows下mysql資料庫中文亂碼的問題

今天下午,在Qt中往mysql資料庫中插入資料時,中文顯示亂碼,如下圖所示: 開始以為是資料庫字元編碼的問題,[1]開始使用set character_set_database=utf8 在命令列上修改字元編碼, 但是重啟mysql之後,字元編碼並沒有修改成功。 [2]於是找到My

Oracle資料庫中文亂碼問題

中文亂碼問題解決 檢視伺服器端編碼 select userenv('language') from dual; 我實際查到的結果為: AMERICAN_AMERICA.ZHS16GB 執行語句 select * from V$NLS_PARAMETE

SpringBoot MySql資料庫中文亂碼問題排查實紀

引言: 最近用StringBoot開發了一個簡單的小程式伺服器,發現通過post請求插入的中文欄位在資料庫中是顯示“???”的形式,本來不以為意,以為是顯示的問題,誰知通過get請求獲取資料的時候返回的也是“???”,這下就開始慌了,於是開始了問題的排查。以下為排查的過程。 首先

centos中mysql資料庫中文亂碼的解決方法

預設my.cnf配置檔案中在/etc/mycnf,開啟之後在裡面加入以下命令即可: [client] default-character-set=utf8 [mysqld] character-set-server=utf8 collation-server=u