关于 try catch

轩_general 发布于 2012/12/24 16:21
阅读 1K+
收藏 1

从网上找的一个occi的连接代码,能够用,但是如果数据库端有什么异常,有时候会导致抛出异常后但是与Oracle的连接没有销毁。谁能给我讲讲try catch 是怎么个工作方式呢,请大神赐教

try
{
const string userName = "SYSTEM";
const string password = "sofia";
const string connectString = "ORCL";
oracle::occi::Environment *env = oracle::occi::Environment::createEnvironment( Environment::DEFAULT);
Connection *conn = env->createConnection( userName, password, connectString);
Statement *stmt = conn->createStatement( sql);
stmt->executeUpdate();
conn->terminateStatement(stmt);
env->terminateConnection(conn);
oracle::occi::Environment::terminateEnvironment(env);
}
catch (SQLException &sqlExcp)
{
printf("Error......\n");
cerr << sqlExcp.getErrorCode() << ": " << sqlExcp.getMessage() << endl;
}

加载中
0
红薯
红薯
大概逻辑如下:
try {
//正常代码执行
}catch(Exception e){
//有异常发生时执行
}finally{
//不管有没有异常发生都会执行
}

此号已注销
此号已注销
回复 @轩_general : 在finally里面你要判断你的连接是否为空,为空就不要关闭连接。
轩_general
轩_general
回复 @死了又活了又死了活了 : 但是如果就没有连接成功 执行final的时候就会报错
此号已注销
此号已注销
回复 @轩_general : 你可以在finally里面关闭连接!
轩_general
轩_general
问题是这样的,try里面有 连接 Oracle的操作 但是如果连接成功了 但是里面的写数据失败了 catch 会捕捉异常 然后就跳出了对吧 这样与Oracle建立的连接就没有被销毁 如果多次执行这段代码 Oracle会崩掉。。。
轩_general
轩_general
那如果try 里面有异常 catch之后 会跳出try吗
0
等闲识却
等闲识却

他catch的就是(SQLException &sqlExcp)

轩_general
轩_general
问题是这样的,try里面有 连接 Oracle的操作 但是如果连接成功了 但是里面的写数据失败了 catch 会捕捉异常 然后就跳出了对吧 这样与Oracle建立的连接就没有被销毁 如果多次执行这段代码 Oracle会崩掉。。
0
时间在追我
时间在追我
加个finally块,就算抛出异常了finally里面的也会执行的,然后再判断连接是否为空,为空则不管,不为空就关了
轩_general
轩_general
yeah!I will try
0
jeffsui
jeffsui

引用来自“红薯”的答案

大概逻辑如下:
try {
//正常代码执行
}catch(Exception e){
//有异常发生时执行
}finally{
//不管有没有异常发生都会执行
}

正解!
轩_general
轩_general
谢谢
0
mtfan
mtfan

 try{

//执行操作数据库代码

}catch{

//操作数据库出错抛出你定义异常code

}finally{

//检测连接数据库是否关闭

    try{

    if(conn != null){

    conn.close();

}    

    }catch{

//关闭连接时异常    

}

}

返回顶部
顶部