Qt 连接 Sqlite数据库 的方法
核心使用类:
QSqlDatabase:提供了一个接口,用于通过连接访问数据。QSqlDatabase的一个实例表示连接。该连接通过受支持的数据库驱动程序之一提供对数据库的访问,该驱动程序派生自QSqlDriver。
QSqlError:可以显示数据操作的错误
QSqlQuery:用来执行DML(数据操作语言)语句,如SELECT、INSERT、UPDATE和DELETE,以及DDL(数据定义语言)语句等.
1、如果我们有大串数据需要导入时,也可以使用prepare()来绑值,然后再通过bindValue()向绑值加入数据
2、使用exec()函数来执行对应的操作语句
使用方法:
一,项目文件增加 sql
QT += core gui sql
二、连接数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件 if(!db.open()){ QMessageBox::warning(this,"错误",db.lastError().text()); return ; } db.close();
三、新建数据表
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件 if(!db.open()){ QMessageBox::warning(this,"错误",db.lastError().text()); return ; } QSqlQuery query(db); //创建一个students表,标题分别为id、name、score、class query.exec("CREATE TABLE students (" "id INTEGER PRIMARY KEY AUTOINCREMENT, " "name VARCHAR(40) NOT NULL, " " score INTEGER NOT NULL, " "class VARCHAR(40) NOT NULL)"); qDebug()<<"表创建完成"; db.close();
四、插入一条记录
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件 if(!db.open()){ QMessageBox::warning(this,"错误",db.lastError().text()); return ; } QSqlQuery query(db); //创建一个students表,标题分别为id、name、score、class query.exec("insert into students(name,score,class) values('测试',85,'一三班')"); qDebug()<<"记录插入成功"; db.close();
五、批量插入数据
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件 if(!db.open()){ QMessageBox::warning(this,"错误",db.lastError().text()); return ; } QSqlQuery query(db); QStringList names; names<<"小A"<<"小B"<<"小C"<<"小D"<<"小E"<<"小F"<<"小G" <<"小H"<<"小I"<<"小G"<<"小K"<<"小L"<<"小M"<<"小N"; QStringList clases; clases<<"初1-1班"<<"初1-2班"<<"初1-3班"<<"初2-1班" <<"初2-2班"<<"初2-3班"<<"初3-1班"<<"初3-2班"<<"初3-3班"; query.prepare("INSERT INTO students (name, score,class) " "VALUES (:name, :score, :class)"); //为每一列标题添加绑定值 foreach (QString name, names) //从names表里获取每个名字 { query.bindValue(":name", name); //向绑定值里加入名字 query.bindValue(":score", (qrand() % 101)); //成绩 query.bindValue(":class", clases[qrand()%clases.length()] ); //班级 query.exec(); //加入库中 qDebug()<< name <<" 记录插入成功"; } db.close();
六、查询记录
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件 if(!db.open()){ QMessageBox::warning(this,"错误",db.lastError().text()); return ; } QSqlQuery query(db); //创建一个students表,标题分别为id、name、score、class query.exec("select * from students"); while(query.next()){ QString id = query.value(0).toString(); QString name = query.value(1).toString(); QString score = query.value(2).toString(); QString classs = query.value(3).toString(); qDebug()<< id <<" " << name <<" " << score <<" " << classs; } db.close();
七:修改记录:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件 if(!db.open()){ QMessageBox::warning(this,"错误",db.lastError().text()); return ; } QSqlQuery query(db); //修改记录 query.prepare("update students set name=:name where id=18"); query.bindValue(":name", "修改名称"); query.exec(); qDebug()<<"记录修改成功"; db.close();