#include "stdafx.h" #include #include //Por sugestão de (http://stackoverflow.com/questions/4225812/c-mysql-sqlstring-crashes-0xc0000005-unable-to-read-memory) #include //#include #include #include #include #include #include #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string fld="Nada"; cout<<"Testando uma conexao...\n"; cout<<"Connector 1.1.3:\n"; sql::mysql::MySQL_Driver *driver; sql::Connection *con; sql::Statement *stmt; sql::ResultSet *res; sql::SQLString tst, tmp01; sql::SQLString * tmp_sql_string = 0x0; //Esse estava dando errado =-> driver = sql::mysql::MySQL_Driver::get_mysql_driver_instance(); driver = sql::mysql::get_mysql_driver_instance(); tmp01="Qualquer coisa aqui dentro..."; try { con = driver->connect("tcp://192.168.1.75:3306", "site_rw", ""); if (con->isClosed()==0) cout<<"Sucesso!\n\n"; cout<<"Inserindo statement...\n"; stmt = con->createStatement(); stmt->execute("USE test_area"); stmt->execute("DROP TABLE IF EXISTS test"); stmt->execute("CREATE TABLE test(id INT, perc DOUBLE, completo BOOL, label01 CHAR(5))"); cout<<"Criada a tabela...\n"; for (int k=0; k<30;k++) stmt->execute("INSERT INTO test(id, perc, completo, label01) VALUES (1, .93, TRUE, 'Ajkjk')"); cout<<"Linhas inseridas...\n"; cout<<"Preparando-se para listar os inteiros:\n"; res = stmt->executeQuery("SELECT * FROM test LIMIT 0,10"); cout<<"\nTotal de fields: "<getMetaData()->getColumnCount(); cout<<"\nTipo de res \t\t\t\t: " <first()).name(); cout<<"\nTipo de res->getMetaData() \t\t: " <getMetaData()->getColumnName(1)).name(); cout<<"\nQuantidade de fields (espero 2) res->getMetaData()->getColumnCount() \t\t: " <getMetaData()->getColumnCount(); //cout<<"\nFetchDirection\t\t: " <getFetchDirection(); cout<<"\n\nVerificando < tmp01 = res->getMetaData()->getColumnName(1); cout<<"\nFinal dos tipos!"; tst = typeid(res->getMetaData()->getColumnName(1)).name(); /* for (unsigned int i=0; igetMetaData()->getColumnCount();i++) { //cout<getMetaData()->getColumnLabel(2).substr(0,res->getMetaData()->getColumnLabel(2).length()); //std::cout<getMetaData()->getColumnLabel(2).o //res->getMetaData()-> //tmp_sql_string = &(res->getMetaData()->getColumnLabel(2)); Tentei de tudo, mas o problema é que o destrutor está terminando antes de fazer a atribuição cout<getMetaData()->getColumnLabel(1); cout<getMetaData()->getColumnLabel(2); res->getString(2)-> cout<getMetaData()->getTableName(1).length(); cout<getMetaData()->getTableName(1).append; cout<<"\nField["<getMetaData()->getTableName(2). } */ int tmp; while (res->next()) { //fld = res->getString("label01").c_str(); cout<getMetaData()->getColumnCount()<getMetaData()->getColumnName(2); cout<<"\nid = " <getInt("id")<<"\tperc: "<getDouble("perc")<<"\t completo : "<getBoolean("completo"); //cout<<"\t label01 : "<getString("label01").asStdString(); //cout<<"\nstd::cout para SQLString : "<getCursorName(); //cout<<"\tlabel (as Int) = " << res->getInt("label"); //cout<<"\tlabel (via fld) = " << res->getString(res->getMetaData()->getColumnName(2)); } delete res; delete stmt; delete con; } catch (sql::SQLException &e) { cout << "# ERR: SQLException in " << __FILE__; cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl; cout << "# ERR: " << e.what() << endl; cout << " (MySQL error code: " << e.getErrorCode() << endl; cout << ", SQLState: " << e.getSQLState() << " )" << endl; } cout<<"\n.\n..\n...\nTerminado!"; cin.get(); return 0; }