回复
SQLite实现用户登录功能
huatechinfo
发布于 2021-1-7 14:43
浏览
0收藏
SQLite实现用户登录功能
void login::on_LoginToMain_clicked()
{
//登录按钮,需要判断用户名和密码是否正确对应
//如果错误弹出提示对话框
//--------------------------------------
//使用SQlite比对用户名和密码
QSqlDatabase db;//使用QSlite驱动
if(QSqlDatabase::contains("qt_sql_default_connection"))
{
db = QSqlDatabase::database("qt_sql_default_connection");
}
else
{
db = QSqlDatabase::addDatabase("QSQLITE");
}
db.setDatabaseName("D:\\QtApplication\\library1-0\\db\\userdata.db");//之前建立的数据库
bool flag=db.open();//判断是否打开
if(flag)
{
QSqlQuery query;//新建查询实例
//如果数据库打开成功,就创建一个关联的QSqlQuery对象,最后由QSqlQuery来执行插入数据工作。
//特别注意:QSqlQuery对象的创建必须在db文件open成功以后才行,否则会出错。
if(query.exec("select * from member"))
{
//此处为访问所有的数据
qDebug()<<"读取成功";
//定义登陆界面的两个文本框输入的内容
int uname=ui->userName->text().toInt();
QString password=ui->password->text();
qDebug()<<"create success";
if(ui->userName->text()==NULL&&ui->password->text()==NULL)
{
//如果输入为空
QMessageBox::warning(this,QString(tr("Waring")),
QString(tr("输入不能为空!请重新输入!")));
}
else
{
//输入不为空时
int nameno=0;//用来seek处定位行数,索引
while(query.next())//循环进行查找
{
qDebug()<<"searchsuccess";
if(uname==query.value(1).toInt())//此处value(1)是存着学号的列
{
//value(int n) :获得属性的值。其中n表示你查询的第n个属性,
//比方我们使用“select * from student”就相当于
//“select id, name from student”,那么value(0)返回id属性的值,value(1)返回name属性的值
nameno=query.value(0).toInt();//此处value(0)是存着序号的列
}
else
{
qDebug()<<"none";
}
}
if(query.seek(nameno))
{
//seek(int n) :query指向结果集的第n条记录。定位到刚刚找到的用户名(学号)对应的行,查找密码进行对比
qDebug()<<"select success";
QString spassword=query.value(2).toString();//读出此行存储的密码
qDebug()<<uname<<spassword;
if(spassword==password)
{
//如果密码匹配,跳转进入主界面
QMessageBox::information(NULL,QString(tr(" ")),
QString(tr("登录成功")));
qDebug()<<"login success";
accept();
}
else
{//用户名和密码不对应
QMessageBox::warning(this,QString(tr("Waring")),
QString(tr("用户名或密码错误!请重新输入!")));
ui->userName->clear();//自动清除用户名和密码
ui->password->clear();
ui->userName->setFocus();//定位光标
}
}
}
}
}}
此处注意,最初查询时不要用
query.prepare("select * from member");
具体原因待续,prepare和exec具体功能不同!o_O
- prepare()
这个函数将sql文本转换成一个准备语句(prepared statement)对象,同时返回这个对象的指针。这个接口需要一个数据库连接指针以及一个要准备的包含SQL语句的文本。它实际上并不执行(evaluate)这个SQL语句,它仅仅为执行准备这个sql语句
还需要后续执行step,finalize语句。
- exec()
sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err)
db描述的是数据库句柄;
[sql UTF8String]要执行的SQL语句;如“select * from member”
第三个参数为回调函数;
第四void *回调函数的第一个参数;
err&错误信息,如果没有SQL问题则值为NULL
使用exec()查询,不然无法查询,member就是表的名字,可以在可视化工具navicat中查看。
赞
收藏
回复
相关推荐