Ich versuch mir grad ne kapselklasse für Datenbankaufgaben zu bauen.
Wenn ich nun allerdings nach dem erfolgreichen Verbinden zur Datenbank (Verbindung kommt an der MySQL-Datenbank an und steht) ein query losschicke, steigt er mit nem Segfault aus.
Hier mal der Header und die relevanten Implemetierungen
dbconnect.h
Code: Alles auswählen
#include <QtSql>
#include <QString>
#include <QVariant>
class DBConnect
{
public:
DBConnect(QString, QString, int);
bool doQuery(QString, int);
bool connect();
bool nextRow(int);
QVariant getValue(int, int);
void clear(int);
bool disconnect();
QString curHost();
QString curDB();
int curPos(int);
int numRows(int);
private:
QList<QSqlQuery> db_query;
QSqlDatabase db;
};
Code: Alles auswählen
DBConnect::DBConnect(QString author, QString application, int num_querys)
{
//DB Settings lesen
QSettings settings(author, application);
settings.beginGroup("database");
QString host = settings.value("host","localhost").toString();
QString db_name = settings.value("name","mythconverg").toString();
QString user = settings.value("user","").toString();
QString pass = settings.value("pass","").toString();
settings.endGroup();
//Connecthandle aufbauen
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(host);
db.setDatabaseName(db_name);
db.setUserName(user);
db.setPassword(pass);
for(int i = 0; i <= num_querys; i++)
{
QSqlQuery query;
db_query.append(query);
}
}
bool DBConnect::connect()
{
if(!db.open())
return false;
else
return true;
}
bool DBConnect::doQuery(QString query_str, int query_nr)
{
if(db_query[query_nr].exec(query_str))
return true;
else
return false;
}
Code: Alles auswählen
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 47073149919088 (LWP 6362)]
0x00002ad012d5a501 in mysql_next_result () from /usr/lib/libmysqlclient_r.so.15
(gdb) bt
#0 0x00002ad012d5a501 in mysql_next_result () from /usr/lib/libmysqlclient_r.so.15
#1 0x00002ad012c16ff4 in ?? () from /usr/lib64/qt4/plugins/sqldrivers/libqsqlmysql.so
#2 0x00002ad012c1a0d2 in ?? () from /usr/lib64/qt4/plugins/sqldrivers/libqsqlmysql.so
#3 0x00002ad00fe1e559 in QSqlQuery::exec () from /usr/lib/qt4/libQtSql.so.4
#4 0x000000000040b463 in DBConnect::doQuery ()
#5 0x000000000040d851 in MainWindow::backupdb ()
#6 0x000000000041289a in MainWindow::qt_metacall ()
#7 0x00002ad01166b788 in QMetaObject::activate () from /usr/lib/qt4/libQtCore.so.4
#8 0x00002ad0100c3257 in QAction::triggered () from /usr/lib/qt4/libQtGui.so.4
#9 0x00002ad0100c3cdd in QAction::activate () from /usr/lib/qt4/libQtGui.so.4
#10 0x00002ad0103e0094 in ?? () from /usr/lib/qt4/libQtGui.so.4
#11 0x00002ad010106e02 in QWidget::event () from /usr/lib/qt4/libQtGui.so.4
#12 0x00002ad0103de381 in QMenu::event () from /usr/lib/qt4/libQtGui.so.4
#13 0x00002ad0100c8afb in QApplicationPrivate::notify_helper () from /usr/lib/qt4/libQtGui.so.4
#14 0x00002ad0100cb23c in QApplication::notify () from /usr/lib/qt4/libQtGui.so.4
#15 0x00002ad0116598f0 in QCoreApplication::notifyInternal () from /usr/lib/qt4/libQtCore.so.4
#16 0x00002ad010118d07 in ?? () from /usr/lib/qt4/libQtGui.so.4
#17 0x00002ad01011728a in QApplication::x11ProcessEvent () from /usr/lib/qt4/libQtGui.so.4
#18 0x00002ad010138425 in ?? () from /usr/lib/qt4/libQtGui.so.4
#19 0x00002ad011658f38 in QEventLoop::processEvents () from /usr/lib/qt4/libQtCore.so.4
#20 0x00002ad011659049 in QEventLoop::exec () from /usr/lib/qt4/libQtCore.so.4
#21 0x00002ad01165b54e in QCoreApplication::exec () from /usr/lib/qt4/libQtCore.so.4
#22 0x000000000040c87c in main ()
Markus