0

我知道在这个论坛上有很多关于如何解决这个问题的建议,但没有一个能解决我的问题。

它总是一样的:代码编译得很好,我可以使用 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 圣保罗

4

0 回答 0