• 2885阅读
  • 0回复

我在运行一个qt 聊天程序, 当客户端要访问服务器 程序一直在报错误  。 [复制链接]

上一主题 下一主题
离线alizi2010
 

只看楼主 正序阅读 楼主  发表于: 2015-05-06
我在运行一个qt 聊天程序, 当客户端要访问服务器 程序一直在报错误  QSqlQuery::exec: database not open。
下面是我的服务器里的数据代码, 请各位帮忙

#include "sqlitedb.h"

SqliteDB::SqliteDB()
{
}

void SqliteDB::connectDB()
{
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("chat.db");
    if ( !db.open())
    {
       QMessageBox::critical(NULL, "Connect to db...", "Connect failed.");
    }
}

void SqliteDB::closeDB()
{
    db.close();
}

void SqliteDB::getUserInfo(QString id)
{
    this->connectDB();
    QSqlQuery  query;
    strListUser.clear();
    /*if(!(query.prepare("select id, password, name from user where id = :id")))
    {QMessageBox::critical(NULL, "prepare", "Prepare failed."+id);}
    query.bindValue(":id",id);
    if(!query.first())
    {QMessageBox::critical(NULL, "exec", "No record.");}
    */

    if (!(query.exec("SELECT id, password, name, logstat,ip FROM user")))
    {
        QMessageBox::critical(NULL, "exec", "Exec failed.");
    }

    while (query.next())
    {
        if ( query.value(0).toString() == id )
        {
            strListUser.append(query.value(0).toString());
            strListUser.append(query.value(1).toString());
            strListUser.append(query.value(2).toString());
            //QMessageBox::critical(NULL, "getUserInfo", query.value(2).toString());
            strListUser.append(query.value(3).toString());
            strListUser.append(query.value(4).toString());
        }
    }
    this->closeDB();
}

//stat 0:ÀëÏß, 1:ÔÚÏß
void SqliteDB::updateUserLogStat(QString id, QString stat)
{
    this->connectDB();

    QSqlQuery  query;
    strListUser.clear();

    if(!(query.prepare("UPDATE user SET logstat = :stat WHERE id = :id")))
    {
        QMessageBox::critical(NULL, "prepare", "Prepare failed.");
    }
    query.bindValue(":id",id);
    query.bindValue(":stat",stat);
    if(!query.exec())
    {
        QMessageBox::critical(NULL, "exec", "Exec failed.");
    }

    this->closeDB();
}

void SqliteDB::updateUserIp(QString id, QString ip)
{
    this->connectDB();

    QSqlQuery  query;
    strListUser.clear();

    if(!(query.prepare("UPDATE user SET ip = :ip WHERE id = :id")))
    {
        QMessageBox::critical(NULL, "prepare", "Prepare failed."+id);
    }
    query.bindValue(":id",id);
    query.bindValue(":ip",ip);
    if(!query.exec())
    {
        QMessageBox::critical(NULL, "exec", "Exec failed.");
    }

    this->closeDB();
}

void SqliteDB::updateUser(QString id, QString name, QString password)
{
    this->connectDB();

    QSqlQuery  query;
    strListUser.clear();

    if(!(query.prepare("UPDATE user SET name = :name, password = :password WHERE id = :id")))
    {
        QMessageBox::critical(NULL, "prepare", "Prepare failed."+id);
    }
    query.bindValue(":id",id);
    query.bindValue(":name",name);
    query.bindValue(":password",password);

    if(!query.exec())
    {
        QMessageBox::critical(NULL, "exec", "Exec failed.");
    }

    this->closeDB();
}

void SqliteDB::getUserAllOnline()
{
    this->connectDB();
    QSqlQuery  query;
    strListId.clear();
    strListName.clear();
    if(!(query.prepare("SELECT id, name FROM user WHERE logstat = :logstat order by logstat desc")))
    {
        QMessageBox::critical(NULL, "prepare", "Prepare failed.");
    }
    query.bindValue(":logstat","1");
    if(!query.exec())
    {
        QMessageBox::critical(NULL, "exec", "Exec failed.");
    }
    while (query.next())
    {
            strListId.append(query.value(0).toString());
            strListName.append(query.value(1).toString());
    }
    this->closeDB();

}

int SqliteDB::insertNewUser( QString id, QString password, QString name, QString ip, QString port)
{
    this->connectDB();
    QSqlQuery  query;
    if (!(query.exec("SELECT id FROM user")))
    {
        QMessageBox::critical(NULL, "exec", "Exec failed.");
        return -1;
    }

    //This id already exist
    while (query.next())
    {
        if ( query.value(0).toString() == id )
        {
            return 0;
        }
    }

    query.prepare("INSERT INTO user (id, password, name, ip, port, logstat)" "VALUES (:id, :password, :name, :ip, :port, :logstat)");
    query.bindValue(":id", id);
    query.bindValue(":password", password);
    query.bindValue(":name", name);
    query.bindValue(":ip", ip);
    query.bindValue(":port", port);

    query.bindValue(":logstat", "0");
    query.exec();

    this->closeDB();

    return 1;
}

/*QString SqliteDB::selectPwd( QString id)
{
    this->connectDB();
    QSqlQuery  query;

    query.bindValue(":id", id);
    if (!(query.exec("SELECT  password  FROM user where id = :id")))
    {
        QMessageBox::critical(NULL, "exec", "Exec failed.");
    }
    return query.value(0).toString() ;
}
*/
快速回复
限100 字节
 
上一个 下一个