[英]Issue on ocilib error handling, how to correctly catch logs errors with ocilib?
我對ocilib進行錯誤處理時遇到問題。
我當前正在使用OCILIB提供兩種錯誤處理機制:
我如何初始化:
if (!isInit && !OCI_Initialize(&OracleManager::errorHandler, NULL, OCI_ENV_DEFAULT | OCI_ENV_CONTEXT))
throw ibs::exceptions::trace::db(61400, mManager.getMessage(61400));
我的錯誤處理回調:
static void errorHandler(OCI_Error *error)
{
LOG_(ibs::io::log::IN_CONSOLE, plog::debug) << OCI_GetSql(OCI_ErrorGetStatement(error));
LOG_(ibs::io::log::IN_FILE, plog::debug) << OCI_GetSql(OCI_ErrorGetStatement(error));
throw ibs::exceptions::trace::db(61403, "code: " + std::to_string(OCI_ErrorGetOCICode(error)) + ", " + OCI_ErrorGetString(error));
}
上下文線程錯誤處理:
if (!OCI_ExecuteStmt(mSt, query.c_str()))
{
OCI_Error *err = OCI_GetLastError();
if (err == nullptr || OCI_ErrorGetOCICode(err) == 0)
{
LOG_(ibs::io::log::IN_CONSOLE, plog::debug) << query;
LOG_(ibs::io::log::IN_FILE, plog::debug) << query;
throw ibs::exceptions::trace::db(61407, mManager.getMessage(61407));
}
errorHandler(err);
}
我的問題是:
在我的第一次插入(在數據庫上)錯誤:Ocilib用正確的錯誤描述調用我的回調。
關於我的第二個(或更多)插入錯誤:Ocilib不調用我的回調,但OCI_ExecuteStmt()返回我為“ false”,並且我的數據未插入數據庫中。
檢測到錯誤的事實必須是正確的。 但是,對於第二個(以及更多個)錯誤,我沒有關於錯誤的任何信息。
出於可追溯性目的,我需要知道:為什么我的數據被拒絕?
我的問題是我只有第一個錯誤才有此信息。
甚至對於上下文線程錯誤處理,即使數據被拒絕,OCI_GetLastError()函數也向我返回空指針,而OCI_ExecuteStmt()返回我為“ false”。
例如 :
也許我在處理錯誤方面做錯了。 幫助將不勝感激。
在C ++ 11應用程序上使用4.6.2 ocilib版本。
您可以在ocilib GitHub存儲庫上打開一個問題,並提供重現該問題的示例代碼嗎?
順便說一句,當您使用C ++進行編碼時,為什么不使用Ocilib C ++ API?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.