Qt登陆注册
登录
1. 初始化 SQLite 数据库
- 添加 SQLite 数据库驱动程序
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
- 驱动程序:提供一些函数或方法用于与数据库进行交互,例如执行 SQL 语句、访问数据库表格等;
- API:数据库的应用编程接口,由一些函数或类组成,用于实现应用程序与数据库的交互。API 的使用方法和接口通常由驱动程序提供。
- QT中QSQLITE 模块提供了 SQLite 数据库的驱动程序和 API
- 打开 SQLite 数据库文件
使用setDatabaseName() 函数指定 SQLite 数据库文件的名称和路径,并使用 open() 函数打开该数据库文件
db.setDatabaseName("user.db");
if(!db.open())
{
qDebug()<<"open error";
}
- 使用 SQLite 数据库模块创建表格
使用 SQL 语句创建一个名为 “users” 的表格
QString createsql=QString("CREATE TABLE IF NOT EXISTS users ("
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
"username TEXT NOT NULL,"
"password TEXT NOT NULL"
")");
QSqlQuery query;
if(!query.exec(createsql)){
qDebug()<<"Failed to create table";
}
else{
qDebug()<<"Table created successfully.";
}
- CREATE TABLE IF NOT EXISTS 是一种条件语句,它表示如果 “users” 表格不存在,就创建这个表格。
- 表格包含了三个字段 “id”、“username” 和 “password”;
- id :
- “INTEGER PRIMARY KEY” 是 SQLite 中用于表示一个字段为主键的数据类型,它是整数类型。表示这个字段的值可以唯一地标识表中的每一条记录,它可以用来作为其他表格的外键,建立表格之间的关联
- “AUTOINCREMENT”:表示自动递增的关键字,只能用于整数类型的主键字段。将在每次插入新记录时自动递增,从而为这个字段生成唯一的值
- “username” 和 “password” 字段都是 TEXT 类型且不能为空。
- 关闭 SQLite 数据库文件
使用 close() 函数关闭 SQLite 数据库文件
db.close();
2. 获取查询
- 获取用户输入的用户名和密码
QString username = ui->lineEdit_username->text();
QString password = ui->lineEdit_password->text();
- 查询用户输入的用户名和密码是否在数据库中存在
QString sql=QString("select * from user where username='%1' and password='%2'")
.arg(username).arg(password);
- select * from user where username=‘%1’ and password=‘%2’ :SQL 查询语句,用于查询符合条件的用户数据。其中 %1 和 %2 是占位符,等待被替换成实际的用户名和密码;
- arg(username).arg(password) 是调用 QString::arg() 方法并传递两个参数,用于替换占位符。第一个参数是 username,用于替换 %1;第二个参数是 password,用于替换 %2。
- 执行并判断
判断查询结果,如果没有找到记录则表示用户名或密码错误,打印登录失败信息并弹出一个提示框,否则表示登录成功,打印登录成功信息并跳转到主界面。
QSqlQuery query(sql); //创建 QSqlQuery 对象并执行 SQL 查询语句
if(!query.next())
{
qDebug()<<"Login error";
QMessageBox::information(this,"登录认证","登录失败,账户或者密码错误");
}
else
{
qDebug()<<"Login success";
QMessageBox::information(this,"登录认证","登录成功");
QWidget *w = new QWidget;
w->show();
this->close();
}
注册
同第一部分:
- 先初始化 SQLite 数据库,
- 获取注册信息:id、两次密码
- 判断:
if(password == surepass)
{
QString sql=QString("insert into user(username,password) values('%1','%2');")
.arg(username).arg(password);
QSqlQuery query;
if(!query.exec(sql))
{
qDebug()<<"insert into error";
QMessageBox::information(this,"注册认证","插入失败!");
}
else
{
qDebug()<<"insert into success";
QMessageBox::information(this,"注册认证","插入成功!");
MainWindow *w = new MainWindow;
w->show();
this->close();
}
}else{
QMessageBox::information(this,"注册认证","两次密码输入不一致");
}
-
QString sql=:定义了一个字符串变量 sql,用于存储 SQL 语句。
-
QString(“insert into user(username,password) values(‘%1’,‘%2’);”):定义了一个 SQL 语句,使用 insert into 命令将数据插入到 user 表格中的 username 和 password 列中。其中 %1 和 %2 是占位符,用于在后面的 arg() 方法中填入真实的值。
-
.arg(username).arg(password);:使用 arg() 方法将真实的用户名和密码填入占位符中,生成完整的 SQL 语句。