Problem z bazą danych
-
Cześć! Próbuję i próbuję i nie mogę dojść jak połączyć się z bazą danych. Doszedłem do tego na podstawie jednego z tutoriali:
hh.pro
@#-------------------------------------------------Project created by QtCreator 2013-12-01T18:42:56
#-------------------------------------------------
QT += core
QT += sql
QT -= guiTARGET = hh
CONFIG += console
CONFIG -= app_bundleTEMPLATE = app
SOURCES += main.cpp
@
main.cpp
@#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QString>int main(int argc, char *argv[])
{
QSqlDatabase db;
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("fd.sqlite");if (!db.open()) { qDebug() << "Błąd: nie można się połączyć z bazą!"; } else { qDebug() << "Nawiązano połączenie z bazą danych."; QSqlQuery dodawanie; dodawanie.exec("INSERT INTO test (imie, nazwisko, wiek) VALUES ('Stefan', 'Kowalski', '20')"); dodawanie.exec("INSERT INTO test (imie, nazwisko, wiek) VALUES ('Jan', 'Nowak', '36')"); QSqlQuery pobieranie; pobieranie.exec("SELECT * FROM test"); while (pobieranie.next()) { QString imie = pobieranie.value(1).toString(); QString nazwisko = pobieranie.value(2).toString(); int wiek = pobieranie.value(3).toInt(); qDebug() << imie << nazwisko << wiek; } } return 0;
}
@i ciągle dostaję, że połączenie z bazą jest, ale nie mogę wykonać na niej operacji i nie chce mi zwrócić imienia, ani nazwiska, wie ktoś co z tym zrobić?
-
Całe Qt zakłada, że istnieje Singleton QCoreApplication. Bez niego, pochodne QObject nie będą działały! Także na początek polecam dodanie na początku:
@
#include <QCoreApplication>
// ..
QCoreApplication app(argc, argv);
@A na końcu:
@
return app.exec();
@ -
ok dzięki, plik wygląda tak:
@
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QString>int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QSqlDatabase db;
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("fgfgfd.sqlite");if (!db.open()) { qDebug() << "Błąd: nie można się połączyć z bazą!"; } else { qDebug() << "Nawiązano połączenie z bazą danych."; QSqlQuery dodawanie; dodawanie.exec("INSERT INTO test (imie, nazwisko, wiek) VALUES ('Stefan', 'Kowalski', '20')"); dodawanie.exec("INSERT INTO test (imie, nazwisko, wiek) VALUES ('Jan', 'Nowak', '36')"); QSqlQuery pobieranie; pobieranie.exec("SELECT * FROM test"); while (pobieranie.next()) { QString imie = pobieranie.value(1).toString(); QString nazwisko = pobieranie.value(2).toString(); int wiek = pobieranie.value(3).toInt(); qDebug() << imie << nazwisko << wiek; } } return app.exec();
}
@ale tak właściwie ciągle jednak jest źle, chyba muszę poszukać innego tutoriala
-
Stworzyłem kilka konsolowych aplikacji Qt4 i nie tworzyłem w nich instacji QCoreApplication.
Tam gdzie używałem sqlite mam w setDatabaseName pełną ścieżkę do pliku bazy, czyli np. QDir::home().path() + dbName + ".sqlite" i działa.Acha... wartości pobierane z query liczymy od 0, więc imie to pobieranie.value(0), nazwisko (1), wiek (2).