【问题标题】:SQLite CREATE query in QTQT 中的 SQLite CREATE 查询
【发布时间】:2016-09-13 13:47:26
【问题描述】:
dataBase = QSqlDatabase::addDatabase("QSQLITE");
dataBase.setDatabaseName("login_password.sqlite");

QSqlQuery authQuery;

if(!dataBase.open())
{
    qDebug() << dataBase.lastError().text();
}

QString create("CREATE TABLE BASE(LOGIN VARCHAR(15) PRIMARY KEY NOT NULL, "
               "PASSWRD TEXT(50) NOT NULL, RIGHTS INT NOT NULL);");

bool state = authQuery.exec(create);
if(!state) qDebug() << "Не удалось создать таблицу!";

查询有什么问题,是否可以制作文本PRIMARY KEY?

【问题讨论】:

  • 你从QSqlQuery::lastError()得到的错误信息是什么?
  • 不相关,但 PASSWRD TEXT(50) 听起来您将在数据库中以明文形式存储密码,这绝对是个坏主意...
  • @MatteoItalia 不,我要加密它们,但这是大学实验室,所以我应该手动进行。
  • @Padmelina:很好,但请记住,您不想加密它们,您只想存储一个salted hash。跨度>

标签: c++ qt sqlite


【解决方案1】:

来自docs

警告:您必须加载 SQL 驱动程序并在 之前打开连接 已创建 QSqlQuery。此外,连接必须保持打开,而 查询存在;否则,QSqlQuery 的行为是未定义的。

在您的问题中,您在打开数据库之前创建了QSqlQuery,您必须在dataBase.open() 调用之后移动authQuery 声明语句,如下所示:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("login_password.sqlite");
if (!db.open())
    qDebug() << "error opening database: " << dataBase.lastError().text();

QSqlQuery authQuery;
QString create("CREATE TABLE BASE(LOGIN VARCHAR(15) PRIMARY KEY NOT NULL, "
               "PASSWRD TEXT(50) NOT NULL, RIGHTS INT NOT NULL);");
if(!authQuery.exec(create)){
    qDebug() << "error executing statement: " << authQuery.lastError().databaseText();
}

【讨论】:

  • 谢谢我复制后不小心打开查询
猜你喜欢
  • 2013-10-07
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多