QT基础知识-数据库(第六天)
1,SQLITE是一个静态数据库,不需要服务器,在嵌入式编程使用的特别多,因为是开源的。ODBC是Windows封装好的数据库的一些接口。2,Qt中数据库的连接,已经数据库的基本操作(建表,选择,批量插入等)的伪代码如下:#include "widget.h"#include "ui_widget.h"#include <QSqlDatabase>#inc...
·
1,SQLITE是一个静态数据库,不需要服务器,在嵌入式编程使用的特别多,因为是开源的。
ODBC是Windows封装好的数据库的一些接口。
2,Qt中数据库的连接,已经数据库的基本操作(建表,选择,批量插入等)的伪代码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>//对数据库操作的类
#include <QVariantList>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//打印QT支持的数据库驱动
qDebug() << QSqlDatabase::drivers();
//添加MySql数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//连接数据库
db.setHostName("127.0.0.1");//数据库服务器IP
db.setUserName("root");//数据库用户名
db.setPassword("123456");//密码
db.setDatabaseName("info");//数据那个数据库
//打开数据库
if(!db.open()){//数据库打开失败
QMessageBox::warning(this, "错误", db.lastError().text());
return;
}
QSqlQuery query;
query.exec("在这里直接写SQL语句即可");
//如果SQL里面是select语句时,
while(query.next()){//一行一行的遍历
//取出当前的内容
qDebug() << query.value(0).toInt()//第一列
<< query.value("age");//第二列,两种方法,下面的更直观
}
//当一个项目中使用多个数据库时
QSqlDatabase db1 = QSqlDatabase::addDatabase("QMYSQL", "a");//连接名的使用方法,如果使用了了连接名就
//必须要在41行创建query1对象时把数据库名字传进去
db1.setHostName("127.0.0.1");//数据库服务器IP
db1.setUserName("root");//数据库用户名
db1.setPassword("123456");//密码
db1.setDatabaseName("test");//使用哪个数据库
//打开数据库
if(!db1.open()){//数据库打开失败
QMessageBox::warning(this, "错误", db.lastError().text());
return;
}
QSqlQuery query1(db1);//必须把数据库名字穿进去,才能执行41行,原因见34行注释
query1.exec("在这里写SQL语句即可");
//批量插入,odbc风格,预处理语句,?相当于占位符
query.prepare("insert into student(name, age, score) values(?, ?, ?)");
//给字段设置内容 list
QVariantList nameList;
nameList << "xiaoming" << "xiaoli" << "xiaoan";
QVariantList ageList;
ageList << 11 << 22 << 33;
QVariantList scoreList;
scoreList << 80 << 90 << 100;
//给字段绑定相应的值,需要按顺序绑定,否则会插入不成功
query.addBindValue(nameList);
query.addBindValue(ageList);
query.addBindValue(scoreList);
//执行预处理命令,即可完成批量插入
query.execBatch();
//批量插入, oracle风格,和上面的只是占位符不一样
query1.prepare("insert into student(name, age, score) values(:name, :age, :score)");
//给字段设置内容 list
QVariantList nameList;
nameList << "xiaoming" << "xiaoli" << "xiaoan";
QVariantList ageList;
ageList << 11 << 22 << 33;
QVariantList scoreList;
scoreList << 80 << 90 << 100;
//给字段绑定
query1.bindValue(":name", nameList);
query1.bindValue(":age" ,ageList);
query1.bindValue(":score" ,scoreList);
//执行预处理命令,即可完成批量插入
query1.execBatch();
}
3,Qt中的QSqlLite和QMySql的区别,不用设置主机Ip,用户名,密码等,因为sqllite是本地的静态数据库,只需要执行下面两句就可以了,其他的操作和上面的相同。
//添加SqlLite数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
//设置数据库
db.setDatabaseName("../info.db");
4,数据库的可视化——QT中的Model-View控件。
其中Model只有一个功能,那就是存储数据,然后通过View类将数据显示出来。伪代码如下:
//设置模型
model = new QSqlTableModel(this);
model -> setTable("student");//指定使用哪个表
//把model放在view里面
ui -> tableView -> setModel(model);
//显示model里的数据
model -> select();
//修改表的名字
model -> setHeaderData(0, Qt::Horizontal, "学号");
这种东西只是开发快一些,不会sql的程序员都可以开发,要想提高自己的技术应该尽量不用这种东西。
更多推荐
已为社区贡献1条内容
所有评论(0)