zoukankan      html  css  js  c++  java
  • Qt 使用数据库SQLite、SQL Server

    在使用数据库时,需要查看安装的QT中支持的驱动列表。一般可以在QT安装目录中的plugins/sqldrivers文件夹中查看所有的驱动插件文件。

    本文重点不在此,故不再细述。

    在xxx.pro工程文件中需要添加如下:

    QT       += sql

    连接SQLite数据库:

    该数据库为轻量级数据库,使用方便。代码如下:
     1 #include <QMessageBox>
     2 #include <QSqlDatabase>
     3 #include <QSqlQuery>
     4 #include <QDebug>
     5  
     6 static bool createConnection()
     7 {
     8     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
     9     db.setDatabaseName("my.db");
    10     if (!db.open()) {
    11         QMessageBox::critical(0, "Cannot open database1",
    12                               "Unable to establish a database connection.", QMessageBox::Cancel);
    13         return false;
    14     }
    15     QSqlQuery query;
    16     // 创建登录用户表
    17     query.exec("create table user (username varchar primary key, passwd varchar)");
    18     query.exec("insert into user values('admin', 'root')");return true;
    19 }
    编译之后,会在目录下生成一个my.db的数据库文件。数据库中有一个名为user的表。
    如果要同时对两个不同的数据库文件进行操作,则:
     1 #include <QMessageBox>
     2 #include <QSqlDatabase>
     3 #include <QSqlQuery>
     4  
     5 static bool createConnection()
     6 {
     7     // 创建一个数据库连接,使用“connection1”为连接名
     8     QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE", "connection1");
     9     db1.setDatabaseName("my1.db");
    10     if (!db1.open()) {
    11         QMessageBox::critical(0, "Cannot open database1",
    12                               "Unable to establish a database connection.", QMessageBox::Cancel);
    13         return false;
    14     }
    15  
    16     // 这里要指定连接
    17     QSqlQuery query1(db1);
    18     query1.exec("create table student (id int primary key, "
    19                 "name varchar(20))");
    20     query1.exec("insert into student values(0, 'LiMing')");
    21     query1.exec("insert into student values(1, 'LiuTao')");
    22     query1.exec("insert into student values(2, 'WangHong')");
    23  
    24     // 创建另一个数据库连接,要使用不同的连接名,这里是“connection2”
    25     QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE", "connection2");
    26     db2.setDatabaseName("my2.db");
    27     if (!db2.open()) {
    28         QMessageBox::critical(0, "Cannot open database1",
    29                               "Unable to establish a database connection.", QMessageBox::Cancel);
    30         return false;
    31     }
    32  
    33     // 这里要指定连接
    34     QSqlQuery query2(db2);
    35     query2.exec("create table student (id int primary key, "
    36                 "name varchar(20))");
    37     query2.exec("insert into student values(10, 'LiQiang')");
    38     query2.exec("insert into student values(11, 'MaLiang')");
    39     query2.exec("insert into student values(12, 'ZhangBin')");
    40     return true;
    41 }

    连接SQL Server数据库:

    前提工作:

    安装了SQL Server 2008,并在SQL Server中创建了数据库MyDB

    Qt通过ODBC连接SQL Server 2008概述:

    Qt通过ODBC连接数据库时,使用的数据库名不是直接写入数据库名称,而是DSN名。

    DSN名的使用方式有两种:

    1、在操作系统中配置DSN;

    2、在Qt程序代码中采用DSN连接字符串直接连接ODBC数据库。

    下面详细介绍在操作系统中配置DSN方式下连接SQL Server 2008的操作过程

    在操作系统中配置DSN

    进入管理工具中选择ODBC数据源

    然后添加
    image
    其中在最后连接哪一个SQLServer服务器,如果已经在SQLServer2008中已经配置完成,则会出现要选择服务器。
    image
    这里的登录ID和密码是同在SQLServer2008中配置的一样。
    image
    如果已经建立好数据库,这里会出现要待选的数据库。
    image
    image
    image
    至此为止,QTDSN已经配置完成。
    然后在QT中进行如下配置:
    1 QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    2     QString dsn = QString::fromLocal8Bit("QTDSN");
    3     db.setHostName("127.0.0.1");
    4     db.setDatabaseName(dsn);
    5     db.setUserName("sa");
    6     db.setPassword("123456");

    这样便链接完成

     1 #include <QMessageBox>
     2 #include <QSqlDatabase>
     3 #include <QSqlQuery>
     4 #include <QDebug>
     5  
     6 static bool createConnection()
     7 {
     8     
     9     QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    10     QString dsn = QString::fromLocal8Bit("QTDSN");
    11     db.setHostName("127.0.0.1");
    12     db.setDatabaseName(dsn);
    13     db.setUserName("sa");
    14     db.setPassword("123456");
    15     if (!db.open()) {
    16         QMessageBox::critical(0, "Cannot open database1",
    17                               "Unable to establish a database connection.", QMessageBox::Cancel);
    18         return false;
    19     }
    20     QSqlQuery query;
    21     // 创建登录用户表
    22     query.exec("select * from  user");
    23     while(query.next()){
    24     qDebug()<<query.value(0).toString();
    25     qDebug()<<query.value(1).toString();
    26     }return true;
    27 }
  • 相关阅读:
    【转】EDK简单使用流程(3)
    【转】应用 printf 语句格式化输出字符
    【转】[FPGA博客大赛](updated)在xilinx的FPGA系统中scanf函数的使用
    BZOJ 1083 [SCOI2005]繁忙的都市
    BZOJ 2821 分块统计
    BZOJ 1034 [ZJOI2008]泡泡堂BNB
    BZOJ 1029 [JSOI2007]建筑抢修
    BZOJ 1096 [ZJOI2007]仓库建设
    BZOJ 1070 [SCOI2007]修车
    BZOJ 1040 [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14366658.html
Copyright © 2011-2022 走看看