oracle blob十六进制,ORACLE 简单的代码 BLOB 类型实例

bool T_Oracl::Init()

{

try

{

//  m_env = Environment::createEnvironment(Environment::DEFAULT);

m_env = Environment::createEnvironment("ZHS16GBK","UTF8");

if (NULL == m_env)

return false ;

/*

string userName = "SYSTEM";

string password = "songck";

string connectString = "//192.168.1.102:1521/ORCL";

*/

m_con = m_env->createConnection(m_str_user, m_str_pass, m_str_con);

m_smt = m_con->createStatement() ;

}

catch(SQLException excp)

{

string str_ex = excp.what() ;

int  id  = excp.getErrorCode() ;

Environment::terminateEnvironment(m_env);

m_env = NULL ;

return false ;

}

return true ;

}

bool  T_Oracl::isCheckTMP(MIR_TEMPLATE *p_left, MIR_TEMPLATE *p_right, DB_ACK_Result& o_ACK)

{

bool is_Exist = false ;

ResultSet* rset = NULL ;

FLOAT32 min_cmp =5.0 ;

try

{

string  str_sql = "SELECT id ,name ,LBIN ,RBIN FROM tb_eyesmart" ;

m_smt->setSQL(str_sql) ;

ResultSet* rset = m_smt->executeQuery();

while (  rset->next ())

{

if(is_Exist)

break ;

FLOAT32  L_CMP , R_CMP ;

Blob l__blob = rset->getBlob (3);

L_CMP = __CmpIrisTMP(p_left , p_right , l__blob );

l__blob.close();

Blob r__blob = rset->getBlob (4);

R_CMP = __CmpIrisTMP(p_left , p_right , r__blob );

r__blob.close();

if (L_CMP < __g_CMP_THREAD ||  R_CMP < __g_CMP_THREAD)

{

string id = rset->getString(1) ;

string name = rset->getString(2) ;

strncpy(&o_ACK.str_ID[0]   , id.c_str() ,  id.length());

strncpy(&o_ACK.str_Name[0] , name.c_str(), name.length());

o_ACK.f_cmpValue =  L_CMP < R_CMP ? L_CMP : R_CMP ;

is_Exist = true ;

}

else

{

min_cmp = min_cmp

min_cmp = min_cmp

}

}

}

catch(SQLException excp)

{

string str_ex = excp.what() ;

int  id  = excp.getErrorCode() ;

is_Exist = false ;

}

if (rset)

m_smt->closeResultSet (rset);

if ( ! is_Exist)

{

o_ACK.f_cmpValue =  min_cmp ;

}

return is_Exist ;

}

FLOAT32 T_Oracl::__CmpIrisTMP(MIR_TEMPLATE * pTemplateA, MIR_TEMPLATE * pTemplateB, Blob& a_blob)

{

a_blob.open (OCCI_LOB_READONLY);

FLOAT32  tmp_cmp =1.0 ;

int compareOk  ;

MIR_RESULTS results;

Stream *instream = a_blob.getStream ();

long    tmp_size = a_blob.length() ;

if ( tmp_size !=579 )

{

return  tmp_cmp ;

}

instream->readBuffer((char*)p_cmp_l_CaptureTemplate->pfullTemplate  ,tmp_size) ;

if (pTemplateA)

{

compareOk = MIR_CompareTemplates(p_cmp_l_CaptureTemplate, pTemplateA, &results);

if ( (!compareOk) && ( ! _isnan(results.Distance_Hamming1) ))

{

if (tmp_cmp > results.Distance_Hamming1)

{

tmp_cmp = results.Distance_Hamming1 ;

}

}

}

if (pTemplateB)

{ compareOk = MIR_CompareTemplates(p_cmp_l_CaptureTemplate, pTemplateB, &results);

if ( (!compareOk) && ( ! _isnan(results.Distance_Hamming1) ))

{

if (tmp_cmp > results.Distance_Hamming1)

{

tmp_cmp = results.Distance_Hamming1 ;

}

}

}

return  tmp_cmp ;

}

bool T_Oracl::InsertIrisTMP(MIR_TEMPLATE *p_left, MIR_TEMPLATE *p_right, DB_ACK_Result &o_ACK)

{

try

{

string  str_sql = "INSERT INTO tb_eyesmart(ID, NAME, GENDER, BIRTHDAY, LBIN, RBIN, OPTIME) VALUES (:v1, :v2, :v3, TO_DATE(:v4, 'YYYY-MM-DD'), EMPTY_BLOB(), EMPTY_BLOB() ,sysdate)" ;

m_smt->setSQL(str_sql) ;

m_smt->setString(1, o_ACK.str_ID);

m_smt->setString(2, o_ACK.str_Name) ;

m_smt->setString(3, o_ACK.str_Age) ;

m_smt->setString(4, o_ACK.str_Birthday) ;

m_smt->executeUpdate();

m_con->commit();

str_sql= "SELECT LBIN ,RBIN FROM tb_eyesmart WHERE ID=:v1  FOR UPDATE" ;

m_smt->setSQL(str_sql) ;

m_smt->setString(1, o_ACK.str_ID) ;

ResultSet *rset  =  m_smt->executeQuery() ;

while( rset->next())

{

char* c=(char*)"";

Blob l_blob  = rset->getBlob(1) ;

Stream* l_strm= l_blob.getStream() ;

l_strm->writeBuffer((char*) p_left->pfullTemplate,__g_LEN_ENROLL_TMP);

l_strm->writeLastBuffer(c,0);

l_blob.closeStream(l_strm) ;

Blob r_blob  = rset->getBlob(2) ;

Stream* r_strm= r_blob.getStream() ;

r_strm->writeBuffer((char*) p_right->pfullTemplate,__g_LEN_ENROLL_TMP);

r_strm->writeLastBuffer(c,0);

r_blob.closeStream(r_strm);

}

m_smt->closeResultSet (rset);

m_con->commit();

return true ;

}

catch(SQLException excp)

{

string str_ex = excp.what() ;

int  id  = excp.getErrorCode() ;

return false ;

}

return  false ;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值