首页 > 代码库 > 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