Qt5连接SQL server2008
安装环境
安装Qt,我安装的是Qt5.2.1(下载链接:http://qtmirror.ics.com/pub/qtproject/archive/qt/5.2/5.2.1/qt-opensource-windows-x86-mingw48_opengl-5.2.1.exe),这个版本的Qt默认支持如下的数据库Available drivers: (“QSQLITE”, “QMYSQL”, “QMYSQL3”, “QODBC”, “QODBC3”, “QPSQL”, “QPSQL7”) 。
安装SQL server2008(官网下载链接:https://download.microsoft.com/download/E/C/1/EC1EA99F-8738-442E-842B-0B483CE62C77/SQLServer2008R2-KB4057113-x64.exe,安装步骤详细参考:https://zhuanlan.zhihu.com/p/65630194?from=singlemessage)。
配置Sql数据源
1、 打开系统的ODBC数据源(如果没有自行百度安装),如下图所示:
2、 点击右边的添加之后,再点SQL server,第一个名称这个很重要连接数据库的时候要使用要英文,第二个描述可以随便写就是对这个数据源的一个描述而已,第三个选择local就可以,如下图所示设置。接着下一步。
3、 sql配置用户登录方式,如下图所示默认就可以了
4、 选择你要连接的数据库如下所示:
5、 如下图所示默认再点击完成即可
6、 点击完成之火之后如下所示,至此数据源的配置结束,
Qt连接SQL server2008
1、 直创建工程,这样的东西就不再过多的敖述。
2、 直接在widget.cpp的文件里面编写代码,首先包含头文件如下:
#include <QSqlDatabase> //连接数据库
#include <QSqlError> //数据库连接错误是使用到
#include <QSqlQuery> //数据库操作
#include <QMessageBox> //警告窗口的头文件,不适用警告窗口就不要添加了
3、 在构造函数里面添加图下代码:
qDebug() << "Available drivers:" << QSqlDatabase::drivers();//输出当前环境支持的数据库,如有不支持的自行解决
//添加数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");//QODBC指要连接的是SQL server数据库
//连接
db.setHostName("DESKTOP-27SFC8I"); //填写主机名(我的电脑是DESKTOP-27SFC8I)或填写ip地址也可以,在SQLServerManager10.msc里面查看不知道主机名的看下面的图片
db.setDatabaseName(QString::fromLocal8Bit("new"));//这个是在系统的ODBC数据源里面设置的数据源
db.setPort(1433); //端口(我这里是1433,也是SQL server默认的端口),这个也在SQLServerManager10.msc里面查看
db.setUserName("DESKTOP-27SFC8I\nhjclxc"); //数据库用户名(我这里的是DESKTOP-27SFC8I\nhjclxc),在打开SQL Server Management Studio的时候的那个就是。
db.setPassword("你的电脑密码"); //数据库密码,一般就是你电脑的密码,
db.setDatabaseName("dbtask"); //要使用的数据库名,就是在前面配置Sql数据源时选择的那个数据库
//判断数据库是否连接成功
if(true == db.open()){
qDebug() << "数据库打开成功" <<endl;
QMessageBox::warning(this,"数据库打开成功","数据库打开成功");
//操作数据库,定义操作句柄
QSqlQuery query;
//创建表的同时,进入操作
if (query.exec("CREATE TABLE student( id INT , name CHAR(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;
}
4、 操作后输出如下:
这也是我的一次学习过程,就在这里记录一下,如果有错误的地方,还请个位大佬帮忙指出, 附上我这次的Qt过程文件(链接:链接:https://pan.xunlei.com/s/VMOMBztZQgwjJJq1vaNJOePcA1
提取码:v7xp),最后这个数据库操作过程我是跟着黑马程序员做的(具体链接:https://www.bilibili.com/video/BV1XW411x7NU?p=85) 如有侵权我将删除,感谢各位看到这里,感谢支持。