MySQL resultset包含1行,但是调用getstring会导致访问冲突
MySQL resultset contains 1 row but calling getstring causes Access Violation
我目前正在学习c++并慢慢取得进展,但遇到MySQL选择和准备语句的问题。
我有一个应用程序链接到一个库和应用程序调用库函数如下:
try
{
DynamicConfig dynamicConfig;
string value = "";
dynamicConfig.getValueFromDBConfig("Test Group", "TestName", &value);
stringstream logStream;
logStream << "Dynamic Config Value: " << value;
bitsLibrary.writeToLog(logStream.str());
}
catch (sql::SQLException ex)
{
cout << "SQL Exception: " << ex.what() << endl;
}
catch (exception ex)
{
cout << "General Exception: " << ex.what() << endl;
}
在DynamicConfig类的库中,我有getValueFromDBConfig方法,其中包含以下内容:
bool DynamicConfig::getValueFromDBConfig(string groupName, string sectionName, string *value)
{
//Connection *conn = NULL;
PreparedStatement *statement = NULL;
ResultSet *resultset = NULL;
try
{
DBManager dbManager;
Connection *conn = dbManager.getDriverConnection();
statement = conn->prepareStatement("SELECT * FROM config_items, config_groups WHERE config_groups.Name=? AND config_items.Name=? AND config_groups.id = config_items.ConfigGroupID");
statement->setString(1, groupName.c_str());
statement->setString(2, sectionName.c_str());
resultset = statement->executeQuery();
cout << "Found " << resultset->rowsCount() << " rows" << endl;
if (resultset->rowsCount() > 0)
{
while (resultset->next())
{
cout << "Value: " << resultset->getString("Value") << endl;
*value = resultset->getString("Value");
}
delete conn;
delete statement;
delete resultset;
return true;
}
else
{
bitsLibrary.writeToLog("No rows were returned", "DynamicConfig", "getValueFromDBConfig");
}
}
catch (SQLException ex)
{
stringstream logStream;
logStream << "Failed to get DB config value. SQL Exception: " << ex.what();
bitsLibrary.writeToLog(logStream.str(), "DynamicConfig", "getValueFromDBConfig");
throw ex;
}
catch (exception ex)
{
stringstream logStream;
logStream << "Failed to get DB config value. General Exception: " << ex.what();
bitsLibrary.writeToLog(logStream.str(), "DynamicConfig", "getValueFromDBConfig");
throw ex;
}
return false;
}
它似乎成功地执行查询,因为它打印出1 rows
到控制台,然而,当我调用resultset->getstring("Value")
时,它抛出一个错误:
Exception thrown at 0x00007FFF7E831EBA (msvcp140d.dll) in TestApp.exe 0xC0000005. Access violation reading location 0xFFFFFFFFF.
我不明白为什么这是不工作,它有一行,我正在看的数据库表肯定有列称为值。
最后总算弄明白了。我需要像下面这样运行getstring
*value = resultset->getString("Value").c_str()
我不明白为什么我需要这样做,我从https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-examples-results.html使用的MySQL示例代码没有显示这一点,所以如果有人能在这一点上透光,那将是伟大的。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- C++尝试深度复制唯一指针时出现内存访问冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 写入访问冲突异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 读取访问冲突.这0xCDCDCDCD
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 插入数组时违反写访问冲突
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- 尝试通过共享指针使用变量时读取访问冲突
- 堆栈上的 C++ 访问冲突写入异常
- 引发异常:写访问冲突. temp 为 nullptr
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 在C++中删除双向链表的头节点后出现访问冲突异常
- MySQL resultset包含1行,但是调用getstring会导致访问冲突