• qt sql 数据库操作


    1.  连接数据库

    mysql连接:

      QSqlDatabase mysql_db=QSqlDatabase::addDatabase("QMYSQL","mysql_connecttion2");

    mysql_db.setHostName("127.0.0.1");
    mysql_db.setDatabaseName("数据库名称");
    mysql_db.setUserName("用户名");
    mysql_db.setPassword("用户密码");
    mysql_db.setPort(数据库端口);// 默认3306
    if(!mysql_db.open())
    {

    printf("mysql_db%s ",qPrintable(mysql_db.lastError().text()));
    exit(2);
    }
    else
    {
    qDebug("mysql_db连接成功");
    mysql_db.exec("SETNAMES'GBK'");
    }
    sqlserver连接:
    sqlserver_db=QSqlDatabase::addDatabase("QODBC","sqlserver_connecttion2");
    
    
    sqlserver_db.setHostName("127.0.0.1");
    
    
    QStringdsn=QString::fromLocal8Bit("DRIVER={SQLSERVER};SERVER=127.0.0.1;DATABASE=数据库名");
    
    
    sqlserver_db.setDatabaseName(dsn);
    
    
    sqlserver_db.setUserName(用户名称);
    
    
    sqlserver_db.setPassword(用户密码);
    
    
    if(!sqlserver_db.open())
    
    
    {
    
    
    printf("sqlserver_db%s
    ",qPrintable(sqlserver_db.lastError().text()));
    
    
    exit(2);
    
    
    }
    
    
    else
    
    
    {
    
    
    qDebug("sqlserver连接成功");

    sqlserver_db.exec("SETNAMES'GBK'");//访问windows服务器时候使用,中文字符处理
    }

    2. 数据库发起重连
    if(QSqlDatabase::contains("mysql_connecttion2"))
    
    
    {
    
    
    mysql_db.commit();
    
    
    mysql_db.close();
    
    
    }
    
    
    if(!mysql_db.open())
    
    
    {
    
    
    printf("mysql_db%s
    ",qPrintable(mysql_db.lastError().text()));
    
    
    open_mysql();
    
    
    }
    
    
    else
    
    
    {
    
    
    qDebug("mysql_db连接成功");
    
    
    mysql_db.exec("SETNAMES'GBK'");
    
    
    }

    3. 数据库操作
    mysql_db=QSqlDatabase::database("mysql_connecttion2");
    if(mysql_db.isOpen()&&mysql_db.isValid()&&mysql_db.isDriverAvailable("QMYSQL"))
    ;//qDebug()<<"mysqlisopen";
    else
    {
    qDebug()<<"mysqlisnotopen";
    open_mysql();
    }
    //查询数据
    QSqlQueryquery(mysql_db);
    query.prepare("select * from tmpt wheret ...;");
    if(query.exec())
    {
    //提取表中的数据
    while(query.next())
    {
    DataStruct data;
    data.*=query.value(0).toString();
    data.*=query.value(1).toInt();
    data.*=query.value(2).toDouble();

    }
    //删除表中的数据
    query.clear();
    foreach(DataStructdata,*datalist)
    {
    query.prepare("delete from tmpt where ...;");
    query.bindValue(...);
    if(query.exec())
    {
    qDebug()<<"删除"<<data.user;
    }
    else
    {
    qDebug()<<tr("删除历史数据失败")<<query.lastError().text();
    open_mysql();
    }
    }
    }
    else
    {
    qDebug()<<query.lastError().text();
    open_mysql();
    }
    query.clear();

    4. 关闭数据库
    mysql_db.commit();
    mysql_db.close();
    if(QSqlDatabase::contains("mysql_connecttion2"))
    QSqlDatabase::removeDatabase("mysql_connecttion2");
    sqlserver_db.commit();
    sqlserver_db.close();
    if(QSqlDatabase::contains("sqlserver_connecttion2"))
    QSqlDatabase::removeDatabase("sqlserver_connecttion2");


  • 相关阅读:
    python两个dict相加
    rpm命令
    python logging模块不支持多进程写到一个log文件
    技术论坛地址收集
    visudo命令编辑修改/etc/sudoers配置文件
    健康是什么
    .net文件类型种种
    禁止脚本的运行
    静态页面的值传递
    datagrid数据导出到excel文件给客户端下载的几种方法 (转)
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/3715985.html
Copyright © 2020-2023  润新知