Я использую sqlite с создателем qt. У меня есть класс, который управляет связью базы данных sqlite и другими операциями. Это код конструктора:Операция «CREATE TABLE If NOT EXISTS» не работает в qt sqlite
dbconnector::dbconnector()
{
digi_db = openDb("QSQLITE","digibill.db");
QSqlQuery qry;
// Creating table owner
qry.prepare("CREATE TABLE IF NOT EXISTS owner (owner_id INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, company_name VARCHAR(30), country VARCHAR(30), address VARCHAR(100), city VARCHAR(30), state VARCHAR(30), email VARCHAR(30), phone VARCHAR(30), website VARCHAR(30), tin VARCHAR(30), currency VARCHAR(30), additional_info VARCHAR(30), logo BLOB)");
if(!qry.exec())
qDebug() << qry.lastError();
else
qDebug() << "Table1 created!";
// Creating table company_details
qry.prepare("CREATE TABLE IF NOT EXISTS company_details (company_id INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, company_name VARCHAR(30), contact VARCHAR(15))");
if(!qry.exec())
qDebug() << qry.lastError();
else
qDebug() << "Table2 created!";
// Creating table product_details
qry.prepare("CREATE TABLE IF NOT EXISTS product_details (product_id INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, product_name VARCHAR(30), price FLOAT, company_id INTEGER, FOREIGN KEY(company_id) REFERENCES company_details(company_id) )");
if(!qry.exec())
qDebug() << qry.lastError();
else
qDebug() << "Table3 created!";
// Creating table client_details
qry.prepare("CREATE TABLE IF NOT EXISTS client_details (client_id INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, company_name VARCHAR(30),contact_name VARCHAR(40), country VARCHAR(30), address VARCHAR(50),city VARCHAR(30), state VARCHAR(30), email VARCHAR(80), phone VARCHAR(15), website VARCHAR(80), tin VARCHAR(30) )");
if(!qry.exec())
qDebug() << qry.lastError();
else
qDebug() << "Table4 created!";
// Creating table invoice_details
qry.prepare("CREATE TABLE IF NOT EXISTS invoice_details (invoice_id INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, date_of_invoice TEXT, client_id INTEGER, product_id INTEGER, FOREIGN KEY(client_id) REFERENCES client_details(client_id), FOREIGN KEY(product_id) REFERENCES product_details(product_id) )");
if(!qry.exec())
qDebug() << qry.lastError();
else
qDebug() << "Table5 created!";
}
Функция opendb создает базу данных и код приведен ниже:
QSqlDatabase dbconnector::openDb(const QString &driver, const QString &name) const
{
QSqlDatabase db;
// contains() default argument is initialized to default connection
if (QSqlDatabase::contains())
{
db = QSqlDatabase::database(QLatin1String(QSqlDatabase::defaultConnection), false);
}
else
{
db = QSqlDatabase::addDatabase(driver.toUpper());
}
db.setDatabaseName(name);
if (!db.isValid())
{
// Log error (last error: db.lastError().text()) and throw exception
}
if (!db.open())
{
// Log error (last error: db.lastError().text()) and throw exception
}
qDebug() <<"Database main open";
return db;
}
Проблема в том, что каждый раз, когда я создать объект класса, запрос получает и я получаю выход как:
Database main open
Table1 created!
Table2 created!
Table3 created!
Table4 created!
Table5 created!
Что не так с моим кодом?
Почему вы думаете, что что-то не так? –
Выполнение запроса не сработает, если таблица существует, поэтому вы должны увидеть свою «Созданную таблицу1»! даже если таблица существовала до вызова. – drescherjm
oh ... k..i получил это сейчас ... спасибо ... –