この問題を解決する方法について、このフォーラムで多くの提案があることは知っていますが、どれも私の問題を解決するものではありませんでした。
コードは問題なくコンパイルされ、getString を除いて、ResultSet が提供するほとんどすべての getXX メンバーを使用できます。getString も問題なくコンパイルされますが、実行時に常にクラッシュします。
getInt("label") または getBlob("label") を使用して char フィールドを取得するなど、いくつかの奇妙な試みを行いましたが、以前に知っていたように結果は良くありませんでしたが、少なくともクラッシュは経験しませんでした。
バージョン 1.0.5 と 1.1.3+boost を試しました。1.1.3 の場合、CMake を使用してソースからもコンパイルしましたが、ユーティリティに関する知識が十分ではなく、CMake を制御できるようになるまでには長い時間がかかると思います。ですから、もっとまっすぐな解決策を得たいと思います。
私の目標は、ネットワークの XUbuntu マシンで実行される MySQL 5.6 でデータを読み書きする、MSVC 2010 から Win32_Console および WinForms コードを作成することです。そして getString() は私をたくさん閉じ込めています。
前もって感謝します
以下のコードを追加しました。
#include "stdafx.h"
#include <iostream>
#include <mysql_driver.h>
#include <mysql_connection.h>
#include <exception.h>
#include <statement.h>
#include <resultset.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
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;
driver = sql::mysql::get_mysql_driver_instance();
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, label CHAR(1))");
cout<<"Criada a tabela...\n";
for (int k=0; k<30;k++)
stmt->execute("INSERT INTO test(id, label) VALUES (1, 'a')");
cout<<"Linhas inseridas...\n";
cout<<"Preparando-se para listar os inteiros:\n";
res = stmt->executeQuery("SELECT * FROM test LIMIT 0,5");
while (res->next())
cout<<"id = " << res->getInt("id") << "\n";
cout<<"\n\nAgora tentando o char(1):\n";
res->beforeFirst();
while (res->next())
cout<<"label = " << res->getString("label");
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<<"Terminado...\n";
return 0;
}
アルイージオ サンパウロ