Ich benutze sqlite mit qt Schöpfer. Ich habe eine Klasse, die SQLite-Datenbank-Konnektivität und andere Operationen verwaltet. Dies ist der Konstruktor Code:"CREATE TABLE WENN NICHT EXISTIERT" Anweisung funktioniert nicht in 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!";
}
Die Funktion opendb erstellt die Datenbank und der Code ist unten angegeben:
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;
}
Das Problem ist, dass jedes Mal, wenn ich ein Objekt der Klasse erstellen, die Abfrage bekommt ausgeführt und ich bekomme die Ausgabe als:
Database main open
Table1 created!
Table2 created!
Table3 created!
Table4 created!
Table5 created!
Was ist falsch mit meinem Code?
Warum denken Sie, dass irgendetwas nicht stimmt? –
Die Ausführung der Abfrage wird nicht fehlschlagen, wenn die Tabelle existiert, so dass Sie Ihre "Table1 created!" Nachricht, auch wenn die Tabelle vor dem Aufruf vorhanden war. – drescherjm
oh ... k..ich hab es jetzt ... danke ... –