我知道在这个论坛上有很多关于如何解决这个问题的建议,但没有一个能解决我的问题。
它总是一样的:代码编译得很好,我可以使用 ResultSet 提供的几乎所有 getXX 成员,除了 getString,它也可以毫无问题地编译,但总是在运行时崩溃。
我做了一些奇怪的尝试,比如使用 getInt("label") 或 getBlob("label") 获取 char 字段,结果并不像我以前知道的那样好,但至少我没有遇到崩溃。
我尝试了 1.0.5 和 1.1.3+boost 版本。在 1.1.3 的情况下,我也使用 CMake 从源代码编译,但我认为我对该实用程序的了解还不够,并且在我控制 CMake 之前它会持续很长时间。所以我想得到一个更直接的解决方案。
我的目标是从 MSVC 2010 创建一些 Win32_Console 和 WinForms 代码,这些代码在我网络的 XUbuntu 机器上运行的 MySQL 5.6 中读取和写入数据。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;
}
Aluísio 圣保罗