您好我使用Connector/C++并执行这样的简单2 sql命令:第一个选择sql运行正常但第二个导致此异常错误:
错误:命令不同步; 你现在不能运行这个命令(MySQL错误代码:2014,SQLState:HY000)
这是代码:
//member of the class
ResultSet *temp_res;
// in different method
m_driver = get_driver_instance();
m_con = m_driver->connect(m_DBhost,m_User,m_Password);
m_con->setSchema(m_Database);
//here i excute the querys :
vector<string> query;
query.push_back("SELECT * FROM info_tbl");
query.push_back("INSERT INTO info_tbl (id,name,age)VALUES (0,foo,36)");
query.push_back("SELECT * FROM info_tbl");
ResultSet *res;
Statement *stmt;
bool stmtVal = false;
try{
stmt = m_con->createStatement();
for(size_t i = 0;i < querys.size();i++)
{
string query = querys.at(i);
stmtVal = stmt->execute(query);
if(!stmtVal)
{
string error_log ="sql statment:";
error_log.append(query);
error_log.append(" failed!");
cout << error_log << endl;
break;
}
}
if(stmtVal)
{
if(returnSet)
{
res = stmt->getResultSet();
temp_res = res;
}
}
delete stmt;
//close connection to db
m_con->close();
} catch (sql::SQLException &e) {
......
}
Run Code Online (Sandbox Code Playgroud)
建议更新新代码(不工作)
for(size_t i = 0;i < querys.size();i++)
{
string query = querys.at(i);
stmtVal = stmt->execute(query);
if(stmtVal)
{
if(returnSet)
{
if(stmt->getResultSet()->rowsCount() > 0)
{
res = stmt->getResultSet();
temp_res = res;
}
else
{
delete res;
}
}
else
{
delete res;
}
}
if(!stmtVal)
{
string error_log ="sql statment:";
error_log.append(query);
error_log.append(" failed!");
cout << error_log << endl;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的简单表格:
Column Type Null
id int(10) No
name varchar(255) No
age int(10) No
Run Code Online (Sandbox Code Playgroud)
一个连接上一次不能有多个活动查询。
来自mysql_use_result文档:
您不能对 mysql_use_result() 返回的结果使用 mysql_data_seek()、mysql_row_seek()、mysql_row_tell()、mysql_num_rows() 或 mysql_affected_rows(),也不能在 mysql_use_result() 完成之前发出其他查询。
这不完全是您正在使用的,但问题是相同的 - 您需要完成第一个处理ResultSet并清理它,然后才能在该连接上发出任何其他查询。
| 归档时间: |
|
| 查看次数: |
2924 次 |
| 最近记录: |