服务端源码下载地址为:
我们可以看见构造函数里面要传入用户名,密码和要传入的库
这里的话有一个不太好的地方,就是当要对数据库进行操作的时候,我这采用字符串重组,这是比较low的方法,其实有更好的方法。
http://download.csdn.net/detail/qq78442761/9768662
这连接数据库之前,先要保证数据库是开启状态,如下图所示:
随后就可以用服务端登录了。
如下图所示:
我们先来看下此程序中关于mysql的代码:
connmysql.h
#ifndef CONNMYSQL_H
#define CONNMYSQL_H
#include <QObject>
#include <QDebug>
#include <QStringList>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QString>
#include <QMessageBox>
#include <QSqlQueryModel>
#include <QTableView>
#include <QVariant>
//返回两个值
struct QStringAndBool
{
QString MesQString;
bool MesBool;
};
class ConnMysql : public QObject
{
Q_OBJECT
public:
explicit ConnMysql(QString UserName,QString PassWd,QString DataBase,QObject *parent = 0);
QStringAndBool LinkMySQL(); //连接MYSQL
void SelectTable(QString selectQString); //查询数据库
void DelectUser(int UserID); //删除用户
void InsertUser(QString userName,char *temp2); //添加用户
void DisLinkMysql(); //断开MySQL
signals:
public slots:
private:
QString m_UserName; //登录MySQL用户名
QString m_PassWd; //登录MySQL密码
QString m_DataBase; //登录到的个数据库
QSqlDatabase db;
QSqlQueryModel *model; //查询数据库
QTableView *view; //显示查询表
};
#endif // CONNMYSQL_H
connmysql.cpp
#include "connmysql.h"
ConnMysql::ConnMysql(QString UserName, QString PassWd,QString DataBase,QObject *parent)
: QObject(parent)
{
m_UserName=UserName;
m_PassWd=PassWd;
m_DataBase=DataBase;
model=new QSqlQueryModel;
view=new QTableView;
}
void ConnMysql::DisLinkMysql()
{
QString SqlQuery="exit";
model->setQuery(SqlQuery);
}
void ConnMysql::DelectUser(int UserID) //用户ID
{
QString SqlQuery="delete from user where id=";
SqlQuery.append(QString::number(UserID));
//qDebug()<<SqlQuery;
model->setQuery(SqlQuery);
}
void ConnMysql::InsertUser(QString userName, char *temp2)
{
qDebug()<<userName;
qDebug()<<temp2;
char buf[1024]="insert into user values(NULL,'";
strcat(buf,userName.toUtf8().data());
strcat(buf,"','");
int il=strlen(buf);
buf[il]=*temp2;
qDebug()<<"buf[il]"<<buf[il];
strcat(buf,"',");
il=strlen(buf);
for(int i=0;i<7;i++)
buf[il+i]=temp2[1+i]+48;
strcat(buf,")");
qDebug()<<buf;
model->setQuery(buf);
}
void ConnMysql::SelectTable(QString selectQString)
{
model->setQuery(selectQString);
model->setHeaderData(0,Qt::Horizontal,"id");
model->setHeaderData(1,Qt::Horizontal,"角色");
model->setHeaderData(2,Qt::Horizontal,"等级");
model->setHeaderData(3,Qt::Horizontal,"金币");
view->setModel(model);
view->setMinimumWidth(430);
view->show();
}
QStringAndBool ConnMysql::LinkMySQL()
{
db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName(m_DataBase);
db.setUserName(m_UserName);
db.setPassword(m_PassWd);
QStringAndBool returnValues;
if(!db.open())
{
QMessageBox::information(NULL,"提示","数据库连接失败!");
returnValues.MesQString="数据库连接失败!";
returnValues.MesBool=0;
return returnValues;
}
else
{
QMessageBox::information(NULL,"提示","数据库连接成功!",QMessageBox::Ok);
returnValues.MesQString="数据库连接成功!";
returnValues.MesBool=1;
return returnValues;
}
}
我们可以看见构造函数里面要传入用户名,密码和要传入的库
在mainwindow.cpp里面可以看见他是这样调用的
void MainWindow::LoginMysql()
{
if(ui->SQLUserlineEdit->text()==""&&ui->SQLPasswdlineEdit->text()==""&&ui->DataBaselineEdit->text()=="")
{
QMessageBox::information(this,"提示","有一项为空,请填写完整",QMessageBox::Yes);
ui->CMDplainTextEdit->appendPlainText(CurrTime::currentDateTime()+"用户登录输入未完整");
}
else
{
Mysql=new ConnMysql(ui->SQLUserlineEdit->text(),ui->SQLPasswdlineEdit->text(),ui->DataBaselineEdit->text());
MysqlLinkValues=Mysql->LinkMySQL();
SetBtn(MysqlLinkValues.MesBool);
ui->CMDplainTextEdit->appendPlainText(CurrTime::currentDateTime()+MysqlLinkValues.MesQString);
}
}
这里的对表进行操作插入、删除、查询
void ConnMysql::DisLinkMysql()
{
QString SqlQuery="exit";
model->setQuery(SqlQuery);
}
void ConnMysql::DelectUser(int UserID) //用户ID
{
QString SqlQuery="delete from user where id=";
SqlQuery.append(QString::number(UserID));
//qDebug()<<SqlQuery;
model->setQuery(SqlQuery);
}
void ConnMysql::InsertUser(QString userName, char *temp2)
{
qDebug()<<userName;
qDebug()<<temp2;
char buf[1024]="insert into user values(NULL,'";
strcat(buf,userName.toUtf8().data());
strcat(buf,"','");
int il=strlen(buf);
buf[il]=*temp2;
qDebug()<<"buf[il]"<<buf[il];
strcat(buf,"',");
il=strlen(buf);
for(int i=0;i<7;i++)
buf[il+i]=temp2[1+i]+48;
strcat(buf,")");
qDebug()<<buf;
model->setQuery(buf);
}
void ConnMysql::SelectTable(QString selectQString)
{
model->setQuery(selectQString);
model->setHeaderData(0,Qt::Horizontal,"id");
model->setHeaderData(1,Qt::Horizontal,"角色");
model->setHeaderData(2,Qt::Horizontal,"等级");
model->setHeaderData(3,Qt::Horizontal,"金币");
view->setModel(model);
view->setMinimumWidth(430);
view->show();
}
这里的话有一个不太好的地方,就是当要对数据库进行操作的时候,我这采用字符串重组,这是比较low的方法,其实有更好的方法。