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();