首页 > 代码库 > Qt+sqlite
Qt+sqlite
前言支持内置数据库:
1、在头文件中声明数据库对象
QSqlDatabase db;
2、在构造函数中定义对象(最好这样定义,因为对于db来说只需要addDatabase一次,否则多次addDatabase会报错)
if(QSqlDatabase::contains("qt_sql_default_connection"))
db = QSqlDatabase::database("qt_sql_default_connection");
else
db = QSqlDatabase::addDatabase("QSQLITE");
3、设置数据库文件路径
db.setDatabaseName(".//qtDb.db");//设置数据库文件名字,选择的是当前路径
4、打开数据库
if(!db.open())
{
qDebug() << "打开数据库失败";
return;
}
5、判断数据库中是否存在某表,不存在则新建(数据库指令相关)
QSqlQuery query(db);
bool isTableExist = query.exec("select * from CSSBDB");//关键的判断
if(!isTableExist)//表不存在,新建表
{
bool success = query.exec("create table CSSBDB(id INTEGER PRIMARY KEY,设备名称 varchar,设备型号 varchar,固定资产编号 varchar,测试部自编号 varchar,卡片编号 varchar,数量 varchar,单价 varchar,启用时间 varchar,用途 varchar,使用人或保管人 varchar,备注 varchar)");//创建数据表
if(success)
{
qDebug() <<"数据库表1创建成功!";
}
else
{
qDebug() <<"数据库表1创建失败!";
QSqlError tempErr = query.lastError();
qDebug()<<tempErr;
return;
}
}
6、获取数据库中有多少数据(行数和列数)
query.exec("select * from CSSBDB");
QSqlQueryModel *model = new QSqlQueryModel();
model->setQuery(query);
int nRecordCount = model->rowCount();//行数
int nColumnCount = model->columnCount();//列数
7、获取表的表头内容
if(query.exec("PRAGMA table_info(CSSBDB)"))
{
QStringList tempList;
while(query.next())
{
tempList.append(query.value(1).toString());
}
}
下图是获取表信息结果
8、更新某条记录
update CSSBDB set companyNumber=‘050689‘ where id=2
9、插入一条记录
insert into CSSBDB values(null,"台式主机","DELL9020MT","050688","CSB-PC001-A","123","1","3000","2016.4.15","服务器","","")//如果id是null则表示id按顺序增加1
10、关闭数据库
db.close();
ps:query.next(数据库命令)是每次返回一行数据,要取出当前行的某列数据,使用query.value(n),n从0开始
Qt+sqlite