QList mit QSqlQuerys -> Segfault beim Query auf die DB
Verfasst: 10. Juni 2007 07:53
Hi Leute!
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
dbconnect.cpp
Und hier mal noch der Backtrace vom Debugger:
Kann mir da jemand helfen?
Markus
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