使用QSqlDatabase、QSqlQuery、QSqlRecord实现sqlite3的链接。
首先要在Pro文件中加载sql模块,如:QT += sql;
然后使用addDatabase来链接库文件,链接类型有如下:
首先使用创建数据QSqlDatabase对象后,使之成为QqlQuery的句柄。然后使用QSqlQuery的exec来执行数据库语言。
创建数据库
static const char* DBName = "./test.db";
QFileInfo file(DBName);
if(file.exists() == false)
{
m_db = QSqlDatabase::addDatabase("QSQLITE");
m_db.setDatabaseName(DBName); //设置数据库名
if (!m_db.open())
{
qWarning("数据库不能打开");
}
QSqlQuery query(m_db);
///创建卡号数据库
query.exec("CREATE TABLE tb_card(cardNum varchar(64) PRIMARY KEY, name varchar(64), job varchar(64))");
query.clear();
}
else
{
if (!m_db.isOpen())
{
if (m_db.contains(DBName))
m_db = QSqlDatabase::database(DBName);
else
{
m_db = QSqlDatabase::addDatabase("QSQLITE",DBName);
}
m_db.setDatabaseName(DBName); //设置数据库名
}
}
m_db.close();
插入:
if (!m_db.open())
{
qWarning("数据库不能打开");
}
QSqlQuery query(m_db);
QString sqlStr;
///打开事务
sqlStr = "begin;";
query.exec(sqlStr);
///插入
QString cardNum = QString::number(rand());
sqlStr = QString("insert into tb_card(cardNum,name,job) values('%1','yjd','神')").arg(cardNum);
query.exec(sqlStr);
///提交事务
sqlStr = "commit;";
query.exec(sqlStr);
m_db.close();
查看:
if (!m_db.open())
{
qWarning()<<"数据库不能打开";
}
QSqlQuery query(m_db);
QString sqlStr;
sqlStr.append("select * from tb_card");
bool isSuccess = query.exec(sqlStr);
QString cardNum, name, job;
while(query.next()) //query.next()指向查找到的第一条记录,然后每次后移一条记录
{
cardNum = query.value(0).toString();
name = query.value(1).toString();
job = query.value(2).toString();
qWarning()<<cardNum<<name<<job<<query.at();
}
m_db.close();
获取字段名称:
if (!m_db.open())
{
qWarning()<<"数据库不能打开";
}
QSqlQuery query(m_db);
QString sqlStr;
sqlStr.append("select * from tb_card");
bool isSuccess = query.exec(sqlStr);
QSqlRecord record = query.record();
query.seek(0);
for (int i = 0; i < record.count(); ++i) {
qWarning()<<record.fieldName(i);
}
m_db.close();
等等,还可以根据其他指令来操作数据库,如更新,删除,排序。