logo       

Loose Connection: msg#00034

db.mysql.c++

Subject: Loose Connection

Hi all,

I've a small example that pretends to execute a query (that goes
trough a parameter), and send the results to the screen.

I've a class AM_Database_Interface that should get the connection,
execute and stores the query, but the problem is that my connection
only persists within the constructor of this class. After that it just
doesn't exists.

My makefile is:

DBInterface : AM_Database_Interface.o main.o
g++ -L/usr/local/mysql/lib/mysql/ -lsqlplus -lmysqlclient -o
DBInterface AM_Database_Interface.o main.o
main.o : main.cpp AM_Database_Interface.h
g++ -c main.cpp -g -I/usr/local/mysql++-1.7.9/sqlplusint/
-I/usr/local/mysql/include/mysql/

AM_Database_Interface.o : AM_Database_Interface.cpp
AM_Database_Interface.h
g++ -c AM_Database_Interface.cpp -g
-I/usr/local/mysql++-1.7.9/sqlplusint/
-I/usr/local/mysql/include/mysql/

clean :
rm -f DBInterface main.o AM_Database_Interface.o

it returns some warnings:

ld: warning: global symbol `_DYNAMIC' has non-global binding:
(file /usr/local/lib/libgcc_s.so.1 value=LOCL);
ld: warning: global symbol `_PROCEDURE_LINKAGE_TABLE_' has non-global
binding: (file /usr/local/lib/libgcc_s.so.1 value=LOCL);
ld: warning: global symbol `_GLOBAL_OFFSET_TABLE_' has non-global
binding: (file /usr/local/lib/libgcc_s.so.1 value=LOCL);


when i excute the output it creates a connection, but then it just
vanish.

I create a connection, with a real_connection method, because is the
only that works in Solaris...


my AM_Database_Interface cpp file is:

AM_Database_Interface::AM_Database_Interface(MyConnection connection)
{
std::string dBName_= connection.dBName;
std::string dBHost_= connection.dBHost;
std::string dBUser_= connection.dBUser;
std::string dBPasswd_= connection.dBPasswd;
int dBPort_= connection.dBPort;
char dBCompress_= connection.dBCompress;
int dBConnectionTimeOut_= connection.dBConnectionTimeOut;
std::string dBSocketName_= connection.dBSocketName;
int dBVar_ = connection.dBVar;



Connection con_(use_exceptions);

con_.real_connect(dBName_.c_str(), dBHost_.c_str(), dBUser_.c_str(),
dBPasswd_.c_str(), dBPort_,
dBCompress_, dBConnectionTimeOut_, NULL, dBVar_);

// In here connection exists
}


AM_Database_Interface::~AM_Database_Interface()
{
con_.close();
}

AM_Database_Interface::executeAndStoreQuery(string sQLString, Result
&result)
{
Result resultz;
Query query= con_.query(); // Connection is lost here
query << sQLString;
resultz = query.store();
}


my main.cpp file is:


#include "AM_Database_Interface.h"
//#include <iostream>
//#include <string>
//#include <iomanip>

using namespace std;
int main ()
{
MyConnection connection;
connection.dBName= "prototipo";
connection.dBHost= "localhost";
connection.dBUser= "root";
connection.dBPasswd= "";
connection.dBPort= 3306;
connection.dBCompress= 0;
connection.dBConnectionTimeOut= 3600;
connection.dBSocketName= "";
connection.dBVar=0;

AM_Database_Interface dbInterfaceObj(connection);
cout << "Criado o objecto com sucesso!" << endl; ;

string str = "select * from SatelliteImages;";
cout << "A SQL Query e :" << str << endl;

Result result;
dbInterfaceObj.executeAndStoreQuery(str, result);

cout << "Registos encontrados : " << result.size() << endl << endl;

Row row;
cout.setf(ios::left);

cout << setw(20) << "component"
<< setw(20) << "instantiation"
<< setw(20) << "filename"
<< setw(20) << "location"
<< setw(20) << "satellite"
<< setw(20) << "coordinates"
<< setw(20) << "dataType"
<< setw(20) << "info UTC"
<< setw(20) << "available"
<< endl;

Result::iterator i;

for(i=result.begin(); i!=result.end();i++)
{
row=*i;
cout << row[0]
<< row[1]
<< row[2]
<< row[3]
<< row[4]
<< row[5]
<< row[6]
<< row[7]
<< row[8]
<< endl;

}


return 0;
}

Can anyone help, please?

I send complete code, because i'm a newbie in c++ and i don't know if
i've any mistake in that...

TIA

Próspero
<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise