Seite 1 von 1

QList mit QSqlQuerys -> Segfault beim Query auf die DB

Verfasst: 10. Juni 2007 07:53
von thereapman
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

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;
};
dbconnect.cpp

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;
}

Und hier mal noch der Backtrace vom Debugger:

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 ()
Kann mir da jemand helfen?

Markus

Verfasst: 10. Juni 2007 09:38
von Christian81
DBConnect::doQuery () ruft DBConnect::doQuery() mit einem ungültigen Index auf.