java jdbc中这个样一个方法事物回滚 后面的 catch finally 里的代码是什么意思 请详细解释一下谢谢
publicbooleandovote(intchoiceid,Stringip,intvoteid)throwsException{booleanbb=false;Co...
public boolean dovote(int choiceid, String ip,int voteid) throws Exception {
boolean bb=false;
Connection conn=null;
try{
conn=ConnectionManager.getConnection();
bb=conn.getAutoCommit();//没有用??
conn.setAutoCommit(false);
String sql="select count(*) from logs where vote_time>dateadd" +
"(second,-10,getdate()) and ip=? and vote_id=?";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1, ip);
ps.setInt(2, voteid);
ResultSet rs=ps.executeQuery();
int res=0;
if(rs.next())
res=rs.getInt(1);
if(res>0)
return false;
sql="insert into logs(ip,vote_id) values(?,?)";
ps=conn.prepareStatement(sql);
ps.setString(1, ip);
ps.setInt(2, voteid);
ps.executeUpdate();
sql="update choice set number=number+1 where choice_id=?";
ps=conn.prepareStatement(sql);
ps.setInt(1, choiceid);
ps.executeUpdate();
conn.commit();
ps.close();
rs.close();
}catch(SQLException e){
if(conn!=null)//连接不为空回滚是什么意思??
conn.rollback();
throw e;//抛出e为什么??
}
finally {
if(conn!=null){
conn.setAutoCommit(bb);//??什么意思
}
ConnectionManager.closeConnection(conn);//???
}
return true;
}
} 展开
boolean bb=false;
Connection conn=null;
try{
conn=ConnectionManager.getConnection();
bb=conn.getAutoCommit();//没有用??
conn.setAutoCommit(false);
String sql="select count(*) from logs where vote_time>dateadd" +
"(second,-10,getdate()) and ip=? and vote_id=?";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1, ip);
ps.setInt(2, voteid);
ResultSet rs=ps.executeQuery();
int res=0;
if(rs.next())
res=rs.getInt(1);
if(res>0)
return false;
sql="insert into logs(ip,vote_id) values(?,?)";
ps=conn.prepareStatement(sql);
ps.setString(1, ip);
ps.setInt(2, voteid);
ps.executeUpdate();
sql="update choice set number=number+1 where choice_id=?";
ps=conn.prepareStatement(sql);
ps.setInt(1, choiceid);
ps.executeUpdate();
conn.commit();
ps.close();
rs.close();
}catch(SQLException e){
if(conn!=null)//连接不为空回滚是什么意思??
conn.rollback();
throw e;//抛出e为什么??
}
finally {
if(conn!=null){
conn.setAutoCommit(bb);//??什么意思
}
ConnectionManager.closeConnection(conn);//???
}
return true;
}
} 展开
4个回答
展开全部
如果出现的异常的话。就是有的sql语句出错了。
程序不能继续往下执行。
这个时候如果链接数据库的链接还存在的话 。那么肯定要将以前执行的sql语句都让他不执行。
要不然执行了第一条语句。没有执行第二条语句。那不是有很大的漏洞嘛。
抛出e 。。。e就是异常信息。。当然。这里面的e你可以自己定义。但是就没有自带的异常信息清楚。
finally就是不管程序有没有异常跑出来 。都要执行的代码。
比如说关闭链接。不管你的sql有没有执行。数据库的链接是必须要关掉的。
conn.setAutoCommit(bb);//??什么意思
这句话肯定是设置一个布尔型的变量来看一看。sql语句是否执行完成。如果没有异常的话 。那么就记录成为true。。如果有异常的话。。那么就记录成false;
最后关闭链接。
程序不能继续往下执行。
这个时候如果链接数据库的链接还存在的话 。那么肯定要将以前执行的sql语句都让他不执行。
要不然执行了第一条语句。没有执行第二条语句。那不是有很大的漏洞嘛。
抛出e 。。。e就是异常信息。。当然。这里面的e你可以自己定义。但是就没有自带的异常信息清楚。
finally就是不管程序有没有异常跑出来 。都要执行的代码。
比如说关闭链接。不管你的sql有没有执行。数据库的链接是必须要关掉的。
conn.setAutoCommit(bb);//??什么意思
这句话肯定是设置一个布尔型的变量来看一看。sql语句是否执行完成。如果没有异常的话 。那么就记录成为true。。如果有异常的话。。那么就记录成false;
最后关闭链接。
展开全部
bb=conn.getAutoCommit();//没有用??
这边是为了获取数据库原始的事务机制,这个会在后边有用,因为你要实现事务管理要讲autocommit设置为false.但要想保持数据库原本的状态,在事务结束后,需要你手动是设置回去。后边第四条有用到。
if(conn!=null)//连接不为空回滚是什么意思??
conn.rollback();
抛出异常后,事务要回滚,这边conn为空,后边会报空指针异常。
throw e;//抛出e为什么??
将异常抛给后边的程序处理。
conn.setAutoCommit(bb);//??什么意思
这边就是第一条所说的。要将事务机制设置回原来状态。
ConnectionManager.closeConnection(conn);//???
释放连接资源。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好:
catch(SQLException e){
//catch块中应该是捕获发生的异常,我感觉这句话应该为if( conn == null)
if(conn!=null)//连接不为空回滚是什么意思??
//事务回滚,事务不会提交,数据库不会发生改变
conn.rollback();
//e是你上面定义的SQLException异常,意思是只要你try块中出现的类似的SQL异常,比如SQL语法错误等都会被抛出给调用方。中断操作。
throw e;//抛出e为什么??
}
finally {
if(conn!=null){
//如果你创建了connection对象,即!=null,则系统会自动提交你关于数据库的操作,也就是你try块中对数据库的操作。
conn.setAutoCommit(bb);//??什么意思
}
希望可以帮到你!
catch(SQLException e){
//catch块中应该是捕获发生的异常,我感觉这句话应该为if( conn == null)
if(conn!=null)//连接不为空回滚是什么意思??
//事务回滚,事务不会提交,数据库不会发生改变
conn.rollback();
//e是你上面定义的SQLException异常,意思是只要你try块中出现的类似的SQL异常,比如SQL语法错误等都会被抛出给调用方。中断操作。
throw e;//抛出e为什么??
}
finally {
if(conn!=null){
//如果你创建了connection对象,即!=null,则系统会自动提交你关于数据库的操作,也就是你try块中对数据库的操作。
conn.setAutoCommit(bb);//??什么意思
}
希望可以帮到你!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(conn!=null)//操作失败后回滚数据库
conn.rollback();
throw e;//抛出异常
}
conn.setAutoCommit(bb);//设置是手动提交事物还是自动提交
ConnectionManager.closeConnection(conn);关闭改连接
conn.rollback();
throw e;//抛出异常
}
conn.setAutoCommit(bb);//设置是手动提交事物还是自动提交
ConnectionManager.closeConnection(conn);关闭改连接
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询