欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:QT-Sqlite數(shù)據(jù)庫的使用

柚子快報(bào)激活碼778899分享:QT-Sqlite數(shù)據(jù)庫的使用

http://yzkb.51969.com/

QT-Sqlite數(shù)據(jù)庫的使用

前言一、相關(guān)操作1.打開數(shù)據(jù)庫2.關(guān)閉數(shù)據(jù)庫3.創(chuàng)建數(shù)據(jù)庫表4.刪除表5.執(zhí)行數(shù)據(jù)庫語句6.數(shù)據(jù)庫查詢7.數(shù)據(jù)庫插入8.模糊查詢

前言

使用Sqlite數(shù)據(jù)可以進(jìn)行一些本地參數(shù)獲取,臨時大數(shù)據(jù)存儲。需要注意的是,如果你后面發(fā)布版本的時候,需要使添加數(shù)據(jù)庫的依賴,要不讓版本發(fā)布的時候,軟件可能使用不了數(shù)據(jù)庫的操作,然后一調(diào)試會發(fā)現(xiàn)數(shù)據(jù)沒有加載驅(qū)動依賴。

一、相關(guān)操作

1.打開數(shù)據(jù)庫

打開數(shù)據(jù)庫的時候,同時也是會生成數(shù)據(jù)庫的的文件。 具體實(shí)例如下:

QSqlDatabase SqlLiteObject::openDatabase(QString strDatabaseName)

{

QString strDir = QString("%1/%2").arg("C:").arg("Database");

// 如果沒有文件夾,我們就先創(chuàng)建文件夾,用來放數(shù)據(jù)庫文件

QDir dir;

if (!dir.exists(strDir))

dir.mkpath(strDir);

m_strDatabaseName = strDatabaseName;

QSqlDatabase db;

if (QSqlDatabase::contains(m_strDatabaseName))

{

// 如果是已經(jīng)創(chuàng)建過了,就直接獲取就行了

db = QSqlDatabase::database(m_strDatabaseName);

}

else

{

// 這里就是創(chuàng)建數(shù)據(jù)庫了

QString strTempName = strDir + strDatabaseName;

db = QSqlDatabase::addDatabase("QSQLITE", m_strDatabaseName);

db.setDatabaseName(strTempName);

}

if (!db.open())

qDebug() << db.lastError().text();

return db;

}

2.關(guān)閉數(shù)據(jù)庫

比較簡單,直接移除數(shù)據(jù)名就可以了

bool SqlLiteObject::closeDatabase()

{

QSqlDatabase::removeDatabase(m_strDatabaseName);

return true;

}

3.創(chuàng)建數(shù)據(jù)庫表

使用數(shù)據(jù)表名strTableName以及列名strHeaderNameList來對外創(chuàng)建

bool SqlLiteObject::createTable(QString strTableName, QStringList strHeaderNameList)

{

bool bRet = true;

do

{

// 必須存在表名和列表名

if (strTableName.isEmpty() || strHeaderNameList.size() <= 0)

{

bRet = false;

return bRet;

}

// m_strTableNameHeaderHash,這是一個QHash的類型,用來支持多張表

auto findItem = m_strTableNameHeaderHash.find(strTableName);

if (findItem == m_strTableNameHeaderHash.end())

m_strTableNameHeaderHash.insert(strTableName, strHeaderNameList);

// 開始組成一個創(chuàng)建表的sql語句

QString strCreateTable = QString(u8"CREATE TABLE %1(").arg(strTableName);

for (int i = 0; i < strHeaderNameList.size(); i++)

{

if (i < (strHeaderNameList.size() - 1))

strCreateTable = strCreateTable + strHeaderNameList[i] + QString(" VARCHAR(256)") + QString(",");

else

strCreateTable = strCreateTable + strHeaderNameList[i] + QString(" VARCHAR(256)") + QString(")");

}

bRet = excute(strCreateTable);

} while (0);

// 這里同時也創(chuàng)建一個csv文件,用了本地直接打開

do

{

QString strDir = QString("%1/%2/%3").arg("C:/").arg("log").arg(SAVE_DIR_NAME);

QDir dirCSV;

if (!dirCSV.exists(strDir))

dirCSV.mkpath(strDir);

QString strFilePath = strDir + "/" + QString("%1-%2.csv").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd")).arg(strTableName);

static QMutex mutex;

QFile fileCSV;

if (!fileCSV.exists(strFilePath))

{

mutex.lock();

QFile file(strFilePath);

if (file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))

{

QTextStream in(&file);

QString strText("");

for (int i = 0; i < strHeaderNameList.size(); i++)

{

if (i == 0)

strText = strHeaderNameList[i] + ",";

else if (i < (strHeaderNameList.size() - 1))

strText = strText + strHeaderNameList[i] + ",";

else

strText = strText + strHeaderNameList[i];

}

in << strText << '\n';

file.close();

}

mutex.unlock();

}

} while (0);

return bRet;

}

4.刪除表

直接執(zhí)行刪除數(shù)據(jù)表語句

bool SqlLiteObject::dropTable(QString strTableName)

{

if (strTableName.isEmpty())

return false;

QString strDrop = QString("DROP TABLE %1").arg(strTableName);

return excute(strDrop);

}

5.執(zhí)行數(shù)據(jù)庫語句

為了解決線程的問題,我們這里采用的是打開數(shù)據(jù)庫后再去執(zhí)行數(shù)據(jù)庫語句。

bool SqlLiteObject::excute(QString strSql)

{

bool bRet = true;

QSqlDatabase db = openDatabase(m_strDatabaseName);

QString strConnectionName = db.connectionName();

QSqlQuery query(db);

query.prepare(strSql);

bool success = query.exec(strSql);

if (!success)

{

qDebug() << "Error:" << query.lastError();

bRet = false;

}

closeDatabase();

return bRet;

}

6.數(shù)據(jù)庫查詢

我們直接將查詢后的數(shù)據(jù)直接緩存到一個哈希表里面,這樣我們應(yīng)用層要使用的時候,再從哈希表里面獲取。

QList< QHash > SqlLiteObject::select(QString strTableName, QString strName, QString strValue)

{

QList< QHash > temp;

if (strTableName.isEmpty() || strTableName.isEmpty())

return temp;

QSqlDatabase db = openDatabase(m_strDatabaseName);

QString strConnectionName = db.connectionName();

QString strSelect("");

if (!strValue.isEmpty())

strSelect = QString("SELECT * FROM %1 WHERE %2 = '%3';").arg(strTableName).arg(strName).arg(strValue);

else

strSelect = QString("SELECT * FROM %1;").arg(strTableName);

db.transaction(); // 開啟事務(wù)查詢

QSqlQuery query("", db);

query.exec(strSelect);

db.commit(); // 提交事務(wù)

while (query.next())

{

QHash keyValueHash;

int nCount = query.record().count();

for (size_t i = 0; i < nCount; i++)

keyValueHash.insert(query.record().fieldName(i), query.record().value(i).toString());

if (keyValueHash.size() > 0)

temp << keyValueHash;

}

closeDatabase();

return temp;

}

7.數(shù)據(jù)庫插入

插入數(shù)據(jù)庫的同時,也保存到本地csv文件,方便用文本直接打開查看內(nèi)容。

bool SqlLiteObject::insert(QString strTableName, QHash dataHash)

{

bool bRet = false;

if (strTableName.isEmpty())

return bRet;

QStringList strHeaderList;

auto findItem = m_strTableNameHeaderHash.find(strTableName);

if (findItem == m_strTableNameHeaderHash.end())

return bRet;

else

strHeaderList = m_strTableNameHeaderHash[strTableName];

// 緩存到csv文件里面

do

{

QString strDir = QString("%1/%2").arg("C:/").arg("Database");

QString strFilePath = strDir + "/" + QString("%1-%2.csv").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd")).arg(strTableName);

static QMutex mutex;

mutex.lock();

QFile file(strFilePath);

if (file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))

{

QTextStream in(&file);

QString strMessage;

for (size_t j = 0; j < strHeaderList.size(); j++)

{

QString strName = strHeaderList[j];

QString strValue = "";

auto findName = dataHash.find(strName);

if (findName != dataHash.end())

strValue = findName.value();

if (j == 0)

strMessage = strValue + ",";

else if (j < (strHeaderList.size() - 1))

strMessage = strMessage + strValue + ",";

else

strMessage = strMessage + strValue;

}

in << strMessage << '\n';

file.close();

}

mutex.unlock();

} while (0);

// 插入數(shù)據(jù)庫

do

{

QString strInsert = QString("INSERT INTO %1 VALUES(").arg(strTableName);

for (size_t j = 0; j < strHeaderList.size(); j++)

{

QString strName = strHeaderList[j];

QString strValue = "";

auto findName = dataHash.find(strName);

if (findName != dataHash.end())

strValue = findName.value();

if (j < (strHeaderList.size() - 1))

strInsert = strInsert + QString("'%1'").arg(strValue) + QString(",");

else

strInsert = strInsert + QString("'%1'").arg(strValue) + QString(")");

}

bRet = excute(strInsert);

} while (0);

return bRet;

}

8.模糊查詢

有時候我們界面需要一些自動補(bǔ)全的功能,那么這個時候,模糊查詢就是我們要用的方式。

QStringList SqlLiteObject::fuzzySearch(QString strTableName, QString strName, QString strLike)

{

QStringList temp;

if (strTableName.isEmpty() || strTableName.isEmpty())

return temp;

QSqlDatabase db = openDatabase(m_strDatabaseName);

QString strConnectionName = db.connectionName();

QString strSelect("");

if (!strLike.isEmpty())

strSelect = QString("SELECT %1 FROM %2 WHERE %3 LIKE '%%4%' LIMIT 0,10;").arg(strName).arg(strTableName).arg(strName).arg(strLike);

else

return temp;

db.transaction(); // 開啟事務(wù)查詢

QSqlQuery query("", db);

query.exec(strSelect);

while (query.next())

{

QHash keyValueHash;

for (size_t i = 0; i < query.record().count(); i++)

{

QString strName = query.record().fieldName(i);

QString strValue = query.record().value(i).toString();

if (!temp.contains(strValue) && (strLike != strValue))

temp << strValue;

}

}

db.commit(); // 提交事務(wù)

closeDatabase();

return temp;

}

柚子快報(bào)激活碼778899分享:QT-Sqlite數(shù)據(jù)庫的使用

http://yzkb.51969.com/

參考文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19187407.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄