Создание и открыть базу данных
QSqlDatabase database;
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("MyDataBase.db");
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else
{
qDebug() << "Succeed to connect database." ;
}
Создать таблицу
QSqlQuery sql_query;
if(!sql_query.exec("create table allfilesdata( \
fileid INTEGER primary key AUTOINCREMENT, \
filename text UNIQUE, \
filepath text NOT NULL, \
filesize INTEGER, \
fileattributes INTEGER NOT NULL, \
creat_dwlowtime INTEGER NOT NULL, \
creat_dwhightime INTEGER NOT NULL, \
lastaccess_dwlowtime INTEGER NOT NULL, \
lastaccess_dwhightime INTEGER NOT NULL, \
lastwrite_dwlowtime INTEGER NOT NULL, \
lastwrite_dwhightime INTEGER NOT NULL)"))
{
qDebug() << "Error: Fail to create table."<< sql_query.lastError();
}
else
{
qDebug() << "Table created!";
}
данные вставки
QSqlQuery sql_query;
sql_query.prepare("INSERT INTO allfilesdata(filename,filepath,filesize,fileattributes,creat_dwlowtime,creat_dwhightime,lastaccess_dwlowtime,lastaccess_dwhightime,lastwrite_dwlowtime,lastwrite_dwhightime) VALUES(:filename,:filepath,:filesize,:fileattributes,:creat_dwlowtime,:creat_dwhightime,:lastaccess_dwlowtime,:lastaccess_dwhightime,:lastwrite_dwlowtime,:lastwrite_dwhightime)");
sql_query.bindValue(":filename",QString::fromStdWString(fd.cFileName));
sql_query.bindValue(":filepath",QString::fromStdWString(folder));
sql_query.bindValue(":filesize",(int)(fd.nFileSizeHigh*(MAXDWORD + 1) + fd.nFileSizeLow));
sql_query.bindValue(":fileattributes",(int)fd.dwFileAttributes);
sql_query.bindValue(":creat_dwlowtime",(int)fd.ftCreationTime.dwLowDateTime);
sql_query.bindValue(":creat_dwhightime",(int)fd.ftCreationTime.dwHighDateTime);
sql_query.bindValue(":lastaccess_dwlowtime",(int)fd.ftLastAccessTime.dwLowDateTime);
sql_query.bindValue(":lastaccess_dwhightime",(int)fd.ftLastAccessTime.dwHighDateTime);
sql_query.bindValue(":lastwrite_dwlowtime",(int)fd.ftLastWriteTime.dwLowDateTime);
sql_query.bindValue(":lastwrite_dwhightime",(int)fd.ftLastWriteTime.dwHighDateTime);
if(!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
qDebug() << "inserted data successfully!";
}
Заполнитель
QSqlQuery sql_query;
QString searchstr="select * from allfilesdata where filename LIKE :linetext";
sql_query.prepare(searchstr);
sql_query.bindValue(":linetext",QString("%%1%").arg(linetext));
Следует отметить, что, положение знака процента LIKE (%) не присутствует в строке SQL, но значение заполнитель связывания происходит, когда, и не может использовать выражение как в строке SQL апостроф ( «), как заполнитель символа строкового типа, то нет никакой необходимости использовать выражение LIKE одиночные кавычки (»)
Бегство характер
SQLite не избежать в одинарных кавычках с обратным косой чертой «/», но с одинарными кавычками, соединен с одинарной кавычкой перед одинарными кавычками ( «»)
Qt соединение Sqlite с помощью массовой вставки данных транзакции
Способ, в пакетном режиме:
dbT1.transaction(); //开始启动事务
inQry.prepare("insert into datatable values (?,?,?)");
while(!ReadDat.atEnd())
{
strTextData = ReadDat.readLine();
listIndex << datIndex;
tmStamp << tmStampCnt;
dtData << strTextData;
datIndex++;
DatWin->append(strTextData);
}
//绑定数据,顺序应与表结构字段数据一致
inQry.addBindValue(listIndex); //绑定数据
inQry.addBindValue(tmStamp); //绑定数据
inQry.addBindValue(dtData); //绑定数据
inQry.execBatch(); //进行批处理操作
dbT1.commit(); //提交事务,此时打开数据库文件执行SQL语句
//不加下面三句,重复操作上面语句时,数据库不会有新的添加
//因为作为主键的listIndex内有原数据,此时数据库不会保存主键值重复的内容
listIndex.clear();
tmStamp.clear();
dtData.clear();
Второй метод заполнитель образом:
dbT1.transaction();
while(!ReadDat.atEnd())
{
strTextData = ReadDat.readLine();
inQry.prepare("insert into datatable(tIndex, tTimStamp, tDistance)"
"values(:tIndex, :tTimStamp, :tDistance)");
inQry.bindValue(0,datIndex);
inQry.bindValue(1,tmStampCnt);
inQry.bindValue(2,strTextData);
inQry.exec();
datIndex++;
DatWin->append(strTextData);
}
dbT1.commit();
Qt5 ошибка при подключении базы данных MySQL
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
QSqlQuery::prepare: database not open
Причина 1 Ошибка: Отсутствует libmysql.dll
Решения: каталог MySQL под \ скопировать 5.5 \ Lib \ libmysql.dll проекта MySQL сервера в каталог сборки
Ошибка Причина 2: сервер MySQL не открывается
Решение: systemctr начала mysqld.service (centos7)
Причина Ошибка 3: Сервер не отключить брандмауэр
решения: systemctr стоп firewalld.service (centos7)