sqlite 命令可能在 qt 中不起作用
sqlite commands possibly not working in qt
我正在用Qt和Sqlite3做一个图书馆管理软件。
构造函数:
db = QSqlDatabase :: addDatabase("QSQLITE");
model = new QSqlTableModel(this, db);
db.setDatabaseName(":/lib/libre coupe.db");
db.setHostName("Libre Coupe");
if(db.open())
{
QSqlQuery query(db);
if (! query.exec("CREATE TABLE IF NOT EXISTS books (NAME VARCHAR(100) NOT NULL, AUTHOR VARCHAR(100) NOT NULL, UID VARCHAR(100) NOT NULL) "))
{
QMessageBox::information(this, "title", "Unable to use Sqlite");
}
if(query.lastError().text() != " ")
QMessageBox::critical(this, "Oops", query.lastError().text());
model->setTable("books");
model->select();
model->setHeaderData(0, Qt::Horizontal, tr("Name") );
model->setHeaderData(1, Qt::Horizontal, tr("Author") );
model->setHeaderData(2, Qt::Horizontal, tr("Uid") );
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
if(!query.exec("SELECT * FROM books;"))
QMessageBox::critical(this, "Oops", query.lastError().text());
int i = 0;
while(query.next())
{
model->setData(model->index(i, 0), query.value(query.record().indexOf("NAME")));
model->setData(model->index(i, 1), query.value(query.record().indexOf("AUTHOR")));
model->setData(model->index(i, 2), query.value(query.record().indexOf("UID")));
++i;
}
}
else
QMessageBox::critical(this, "Oops!", "Could not open the database");\
我遇到了数据库没有自动创建的问题。因此,我手动创建了它并将其添加到我的资源中,以便它存在于使用我的应用程序的每台计算机上。
我 运行 我的应用程序并转到包含 "libre coupe.db" 的目录。在那里使用终端,我发现没有创建 table 。我没有看到错误消息。我的其他功能(如保存)也不起作用,而使用终端直接输入 Sqlite 的相同命令按预期工作。
我什至用了调试器,发现程序确实进入了if条件,即数据库打开成功。
我使用以下命令检查 table 是否存在:
sqlite3 "libre coupe.db"
.tables
第一行:
db.setDatabaseName(":/lib/libre coupe.db");
开头的“:”表示您正在尝试使用 Qt 的资源系统访问嵌入式二进制资源。
但是,SQLite数据库不能存储在Qt资源系统中。如果您的数据库位于 /lib/libre coupe.db,您应该删除开头的冒号。
我正在用Qt和Sqlite3做一个图书馆管理软件。
构造函数:
db = QSqlDatabase :: addDatabase("QSQLITE");
model = new QSqlTableModel(this, db);
db.setDatabaseName(":/lib/libre coupe.db");
db.setHostName("Libre Coupe");
if(db.open())
{
QSqlQuery query(db);
if (! query.exec("CREATE TABLE IF NOT EXISTS books (NAME VARCHAR(100) NOT NULL, AUTHOR VARCHAR(100) NOT NULL, UID VARCHAR(100) NOT NULL) "))
{
QMessageBox::information(this, "title", "Unable to use Sqlite");
}
if(query.lastError().text() != " ")
QMessageBox::critical(this, "Oops", query.lastError().text());
model->setTable("books");
model->select();
model->setHeaderData(0, Qt::Horizontal, tr("Name") );
model->setHeaderData(1, Qt::Horizontal, tr("Author") );
model->setHeaderData(2, Qt::Horizontal, tr("Uid") );
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
if(!query.exec("SELECT * FROM books;"))
QMessageBox::critical(this, "Oops", query.lastError().text());
int i = 0;
while(query.next())
{
model->setData(model->index(i, 0), query.value(query.record().indexOf("NAME")));
model->setData(model->index(i, 1), query.value(query.record().indexOf("AUTHOR")));
model->setData(model->index(i, 2), query.value(query.record().indexOf("UID")));
++i;
}
}
else
QMessageBox::critical(this, "Oops!", "Could not open the database");\
我遇到了数据库没有自动创建的问题。因此,我手动创建了它并将其添加到我的资源中,以便它存在于使用我的应用程序的每台计算机上。
我 运行 我的应用程序并转到包含 "libre coupe.db" 的目录。在那里使用终端,我发现没有创建 table 。我没有看到错误消息。我的其他功能(如保存)也不起作用,而使用终端直接输入 Sqlite 的相同命令按预期工作。
我什至用了调试器,发现程序确实进入了if条件,即数据库打开成功。
我使用以下命令检查 table 是否存在:
sqlite3 "libre coupe.db"
.tables
第一行:
db.setDatabaseName(":/lib/libre coupe.db");
开头的“:”表示您正在尝试使用 Qt 的资源系统访问嵌入式二进制资源。
但是,SQLite数据库不能存储在Qt资源系统中。如果您的数据库位于 /lib/libre coupe.db,您应该删除开头的冒号。