1.Sqlite数据库连接的创建
QString connString = QCoreApplication::applicationDirPath();
connString += "\\test.db";
QSqlDatabase m_database = QSqlDatabase::addDatabase("QSQLITE");
m_database.setDatabaseName(connString);
if( !m_database.open() )
{
qDebug() << __FILE__ << __LINE__ << "warning: database not connect. " << m_database.lastError() << "\n";
return false;
}
2.表的增、删、改操作
int row = 0;
if (!m_database.isValid())
{
return -1;
}
if ((!m_database.isOpen()) && (!m_database.open()))
{
qCritical() << QObject::tr("database error: ")
<< m_database.lastError().text();
return -1;
}
sqlQuery.exec("SET client_encoding=GBK");
try
{
if (sqlQuery.prepare(query))
{
sqlQuery.exec(query);
}
rows = sqlQuery.numRowsAffected();
if (query.startsWith("insert", Qt::CaseInsensitive))
{
if (rows > 0)
{
rows = sqlQuery.lastInsertId().toInt();
}
}
}
catch(...)
{
qCritical() << QObject::tr("database error: ")
<< m_database.lastError().text();
}
return row;
2.1 数据的预处理数据绑定
对于一个QString模板: QString str = "SELECT * FROM %1"
可以使用str.arg(TableName);绑定参数
而一个sql模板:QString sql = "SELECT * FROM ?"
使用:query.prepare(sql)
可以使用:query.bindValue(0,一个值);
再使用query.exec(sql);执行
3.表的查询操作
QSqlQuery sqlQuery(m_database);
sqlQuery.exec("SET client_encoding=GBK");
try
{
sqlQuery.setForwardOnly(true);
while(sqlQuery.next())
{
result.append(sqlQuery.record());
}
}
catch(...)
{
qCritical() << QObject::tr("database error: ")
<< m_database.lastError().text();
}
4.其他常用操作
4.1 初始化记录的字段
void TbStudent::initQSqlRecord(QSqlRecord &record)
{
QSqlField field1(ID);
record.append(field1);
QSqlField field2(AGE);
record.append(field2);
QSqlField field3(NAME);
record.append(field3);
QSqlField field4(SALARY);
record.append(field4);
QSqlField field5(CODE);
record.append(field5);
}