c 用mysql要用连接器吗_在C中具有MySQL连接器代码的线程不会结束

在我正在使用的XMLRPC服务器中(基于xmlrpc-c),线程可能希望使用以下功能建立MySQL连接以检索某些数据:

Distribution getEntitySetFromMysql( int id ) {

Distribution result;

try {

sql::Driver *driver = get_driver_instance();

sql::Connection *con = driver->connect( (std::string)DBHOST, (std::string)USER, (std::string)PASSWORD);

con->setSchema( (std::string)DATABASE );

sql::Statement *stmt = con->createStatement();

std::stringstream query;

query << "SELECT concept_id, weight FROM entity_set_lines WHERE entity_set_id = " << id;

sql::ResultSet *res = stmt->executeQuery ( query.str() );

while (res->next()) {

result[ res->getInt("concept_id") ] = res->getDouble("weight");

}

delete res;

delete stmt;

con->close();

delete con;

} catch (sql::SQLException &e) {

std::cout << "ERROR: SQLException in " << __FILE__;

std::cout << " (" << __func__<< ") on line " << __LINE__ << std::endl;

std::cout << "ERROR: " << e.what();

std::cout << " (MySQL error code: " << e.getErrorCode();

std::cout << ", SQLState: " << e.getSQLState() << ")" << std::endl;

if (e.getErrorCode() == 1047) {

std::cout << "

Your server does not seem to support Prepared Statements at all. ";

std::cout << "Perhaps MYSQL < 4.1?" << std::endl;

}

} catch (std::runtime_error &e) {

std::cout << "ERROR: runtime_error in " << __FILE__;

std::cout << " (" << __func__ << ") on line " << __LINE__ << std::endl;

std::cout << "ERROR: " << e.what() << std::endl;

}

return result;

}

一切正常,但是在线程运行该代码并成功返回其结果之后,该线程保持挂起状态并且不会退出.这种方法有什么问题?这从根本上讲错了吗? MySQL连接器线程安全吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值