QT数据库操作

时间:2022-12-30 10:57:40
  • QT对数据库的支持
    • QtSql类用于对数据库的支持
    • 使用是需包含<QtSql>
      • 包含以下类:QT数据库操作
      • QSqlDatabase 类用于新建数据库
      • QSqlQuery用来来执行sql语句,如QSqlQuery query;query.exec("create table student(ID int primary key,name varchar(20)");
    • 需要在.pro文件底部加上 QT +=sql 一句
    • Qt支持的数据库类型:
      • QT数据库操作
    • 显示可用数据库驱动:
      • qDebug()<< "avalible sql drivers:";
        QStringList drivers= QSqlDatabase::drivers();
        foreach( QString driver,drivers)
        {
        qDebug()<< "/t"<<driver;
        }
        return a.exec();
      • linux系统下查看QT支持的数据库    
        • 进入此目录:pyd@ubuntu:/usr/local/Trolltech/Qt-4.6.3/plugins/sqldrivers$ 
        • pyd@ubuntu:/usr/local/Trolltech/Qt-4.6.3/plugins/sqldrivers$ ls
          libqsqlite.so  libqsqlite.so.debug  libqsqlmysql.so
        • ldd .so文件,查看是否有not found


  • Qt中使用sqlite
    • #include <QtCore/QCoreApplication> 
    • #include <QtSql> 
    • int main(int argc, char *argv[]) 
    • {  
    •        QCoreApplication a(argc, argv);  
    •        QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”); //添加数据库驱动 
    •        db.setDatabaseName(“:memory:”); //数据库连接命名 
      • //也可以写“e:test.db"
    •        if(!db.open())  //打开数据库 
    •        { 
    •               return fals e; 
    •        } 
    •        QSqlQuery query;  // 以下执行相关QSL 语句 
    •        query.exec(“create table student(id int primary key,name varchar)”); 
    •        //新建student 表,id设置为主键,还有一个name项 
    •        query.exec(“insert into student values(1,’xiaogang’)”);  
    •        query.exec(“insert into student values(2 ,’xiaoming’)”); 
    •        query.exec(“insert into student values(3,’xiaohong’)”);  
    •        //向表中插入3 条记录 
    •        query.exec(“select id,name from student where id >= 2″); 
    •        //查找表中id >=2  的记录的id项和name项的值 
    •        while(query.next())             //query.next()指向查找到的第一条记录,然后每次后移一
    • 条记录 
    •        { 
    •               int ele0 = query.value(0).toInt();             //query.value(0)是id的值,将其
    • 转换为int 型 
    •               QString ele1 =query.value(1).toString(); 
    •               qDebug() << ele0 <<ele1 ;            //输出两个值 
    •        } 
    •       
    •        return a.exec(); 
    • }  
    • 我们使用了SQLite数据库,连接名为“:memory:”表示这是建立在内存中的数据库,也就是
    • 说该数据库只在程序运行期间有效。如果需要保存该数据库文件,我们可以将它更改为实际的
    • 文件路径
    • 示例:QT数据库操作
  • Qt中使用其他数据库
    • QT需要手动编译其他数据库的驱动代码,以插件的形式使用它们。
    • 在QT帮助文档里搜索SQL Database drivers可以看到每种驱动的方法
  • sqlite数据库
    • sqlite是一款轻量级的数据库,经常被用在嵌入式,免费的Qt自带sqlite的驱动
    • 在本地生成数据库,没有用户与密码设置
    • linux下sqlite的安装:
      • sudo apt-get install sqlite3
    • linux下sqlite的使用:
      • sqlite在当前目录下生成、打开数据库文件
        • 命令行里输入“sqlite3 1.db”,如果1.db文件存在则会打开,不存在则创建,实际似乎在.database后创建
        • .database
        • .tables
        • .quit  .exit
  • QT中使用myssql
    • setDatabaseName("test");//不能指定目录,不能加.db
      • //连接数据库
      •     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");//选择数据库类型
      •     db.setDatabaseName("ods1");//设置数据库名称

      •     if(isSqlConnected)
      •     {

      •     }
      •     else
      •     {
      •         db.setHostName(ui->hostNameLineEdit->text());
      •         db.setUserName(ui->userNameLineEdit->text());
      •         db.setPort(ui->sqlPortLineEdit->text().toInt());
      •         db.setPassword(ui->passwdLineEdit->text());
      •         qDebug("set completed");
      •         qDebug()<<ui->hostNameLineEdit->text()<<ui->userNameLineEdit->text()<<ui->sqlPortLineEdit->text().toInt()<<ui->passwdLineEdit->text();
      •     }

      •     if(db.open())//open! not isopen() !!!
      •     {
      •         qDebug("sql connected");
      •         isSqlConnected = true;
      •     }
      •     else
      •     {
      •         qDebug("not connected");
      •     }
  • 注意事项
    • QSqlTableModel 和 QSqlQuery 等与数据库相关的类必须在数据库连接后建立才有效