改进代码#include "database.h" #include <QSqlQuery> #include <QVariant> #include <QDebug> Database::Database(QObject *parent):QObject(parent) { db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("./database/user.db"); db.open(); db.exec("create table if not exists Person(ID integer primary key autoincrement, name varchar(30), pwd varchar(30))"); } Database::~Database() { db.close(); } int Database::no_res(char* sql) { QSqlQuery query; int ret = query.exec(sql); return ret; } int Database::login(char* sql) { QSqlQuery query; query.exec(sql); while(query.next()) { int ret = query.value(0).toInt(); return ret; } return 0; }
时间: 2024-01-15 14:03:20 浏览: 128
这段代码看起来已经很不错了,不过还有一些可以改进的地方:
1. 使用 QString 替代 char* 类型,更加方便和安全。
2. 在 login 函数中,如果查询结果为空,应该返回 -1 表示出错,而不是返回 0。
3. 可以在函数中添加一些错误处理机制,比如在打开数据库时检查是否成功打开,如果出错应该输出错误信息。
改进后的代码如下:
```
#include "database.h"
#include <QSqlQuery>
#include <QVariant>
#include <QDebug>
Database::Database(QObject *parent):QObject(parent)
{
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("./database/user.db");
if(!db.open())
{
qDebug() << "Error: Failed to connect database." << db.lastError();
}
else
{
QSqlQuery query;
query.exec("create table if not exists Person(ID integer primary key autoincrement, name varchar(30), pwd varchar(30))");
}
}
Database::~Database()
{
db.close();
}
int Database::no_res(QString sql)
{
QSqlQuery query;
int ret = query.exec(sql);
if(!ret)
{
qDebug() << "Error: " << query.lastError();
}
return ret;
}
int Database::login(QString sql)
{
QSqlQuery query;
query.exec(sql);
if(query.next())
{
int ret = query.value(0).toInt();
return ret;
}
return -1;
}
```
阅读全文