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

目錄

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

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

http://yzkb.51969.com/

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

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

前言

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

一、相關(guān)操作

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

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

QSqlDatabase SqlLiteObject::openDatabase(QString strDatabaseName)

{

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

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

QDir dir;

if (!dir.exists(strDir))

dir.mkpath(strDir);

m_strDatabaseName = strDatabaseName;

QSqlDatabase db;

if (QSqlDatabase::contains(m_strDatabaseName))

{

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

db = QSqlDatabase::database(m_strDatabaseName);

}

else

{

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

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ù)庫(kù)

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

bool SqlLiteObject::closeDatabase()

{

QSqlDatabase::removeDatabase(m_strDatabaseName);

return true;

}

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

使用數(shù)據(jù)表名strTableName以及列名strHeaderNameList來(lái)對(duì)外創(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,這是一個(gè)QHash的類(lèi)型,用來(lái)支持多張表

auto findItem = m_strTableNameHeaderHash.find(strTableName);

if (findItem == m_strTableNameHeaderHash.end())

m_strTableNameHeaderHash.insert(strTableName, strHeaderNameList);

// 開(kāi)始組成一個(gè)創(chuàng)建表的sql語(yǔ)句

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);

// 這里同時(shí)也創(chuàng)建一個(gè)csv文件,用了本地直接打開(kāi)

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ù)表語(yǔ)句

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ù)庫(kù)語(yǔ)句

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

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ù)庫(kù)查詢(xún)

我們直接將查詢(xún)后的數(shù)據(jù)直接緩存到一個(gè)哈希表里面,這樣我們應(yīng)用層要使用的時(shí)候,再?gòu)墓1砝锩娅@取。

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(); // 開(kāi)啟事務(wù)查詢(xún)

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ù)庫(kù)插入

插入數(shù)據(jù)庫(kù)的同時(shí),也保存到本地csv文件,方便用文本直接打開(kāi)查看內(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ù)庫(kù)

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.模糊查詢(xún)

有時(shí)候我們界面需要一些自動(dòng)補(bǔ)全的功能,那么這個(gè)時(shí)候,模糊查詢(xún)就是我們要用的方式。

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(); // 開(kāi)啟事務(wù)查詢(xún)

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ù)庫(kù)的使用

http://yzkb.51969.com/

參考文章

評(píng)論可見(jiàn),查看隱藏內(nèi)容

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

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

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

發(fā)布評(píng)論

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

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

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

文章目錄