1:创建工程,创建时Base Class选择Qwidge,创建号后,点开后缀为.pro的文件,将QT += core gui
修改为QT += core gui sql
2:在sql server Management中选择好数据库,右键,新建登陆名gcw
下方选择好默认数据库
记得要关掉强制密码策略,然后打开这个界面左侧的用户映射现!
先在上面勾选你想要连接的那个数据库,随后还需要勾选下方的这两个
打开状态那一栏,保证是这样的
创建好后,打开ODBC数据源,用windows搜索功能就能找到
点击添加,选择这个
密码就是之前创用户的那个
测试数据源,成功
回到QT在widget.cpp那个文件里,把这些代码贴进去
#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase> //连接数据库
#include <QSqlError> //数据库连接错误是使用到
#include <QSqlQuery> //数据库操作
#include <QMessageBox> //警告窗口的头文件,不适用警告窗口就不要添加了
#include<QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
qDebug() << "Available drivers:" << QSqlDatabase::drivers();//输出当前环境支持的数据库,如有不支持的自行解决
//添加数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");//QODBC指要连接的是SQL server数据库
//连接
db.setHostName("local"); //填写主机名或填写ip地址也可以,在SQLServerManager10.msc里面查看不知道主机名的看下面的图片
db.setDatabaseName("gcw");//这个是在系统的ODBC数据源里面设置的数据源
db.setUserName("gcw"); //数据库用户名(我这里的是DESKTOP-27SFC8I\nhjclxc),在打开SQL Server Management Studio的时候的那个就是。
db.setPassword("gcw010927"); //数据库密码,一般就是你电脑的密码,
//判断数据库是否连接成功
if(true == db.open()){
//操作数据库,定义操作句柄
QSqlQuery query;
//创建表的同时,进入操作
if (query.exec("CREATE TABLE student( id INT , name VARCHAR(10), phone INT);") ){
qDebug() << "创建表操作成功!!!" << endl;
QMessageBox::warning(this,"数据表创建成功","数据表创建成功");
/*
//当行插入数据
query.exec("insert into student(id, name, phone) values(1000, '哈哈哈',151615616);");
query.exec("insert into student(id, name, phone) values(1320, '哈哈哈',151615616);");
query.exec("insert into student(id, name, phone) values(1032, '哈哈哈',151615616);");
query.exec("delete from student where id = 1032;");
//批量插入,还有其他方法也可以,这里就不在演示了
for(int i = 0; i < 10; i++){
qDebug() << QString::number(1000+i, 10);
qDebug() << "insert into student(id, name, phone) values(" + QString::number(1000+i,10) + ", '哈哈哈',151615616);" ;
query.exec(QString("insert into student(id, name, phone) values(" + QString::number(1000+i,10) + ", '哈哈哈',151615616);"));
}
*/
//查询
query.exec("select * from student;");
//query.exec("select * from student where id = 1032;");//条件查询
//判断下这个数据表是否有数据,有就继续输出
while (query.next()) {
//query.value(0)表示取第0列的值,在将其转化为对应的类型,创建表的时候是什么类型就转换为什么类型,使用数据表的字段名也可以输出,如"name"、"phone"
qDebug() << "id: " << query.value(0).toInt()
<< ", name: "<<query.value("name").toString()
<< ", phone: " << query.value("phone").toInt();
}
//如果数据库存在就删除
//if (query.exec("drop table student;"))
// QMessageBox::warning(this,"数据表删除成功","数据表删除成功");
}
else
qDebug() << "语法有误,操作失败!!!" << endl;
//可以打开的话必须关闭
db.close();
}else{
QMessageBox::warning(this,"数据库打开失败!!!",db.lastError().text());
qDebug() << "数据库打开失败!!!"<< db.lastError().text() <<endl;
}
}
Widget::~Widget()
{
delete ui;
}
感谢这两份博客:
https://blog.csdn.net/qq_43680827/article/details/123344162
https://blog.csdn.net/xianchao0127/article/details/111084495