当我给amt > sabal
并期望其他分支应该执行(抛出自定义异常)但它没有执行相应的catch。
此计划中的逻辑错误在哪里?是否因为setAutoCommit仍为false或其他逻辑错误而发生?
班级帐户:
package com.jlcindia.transactionmanagement;
import java.sql.*;
public class Account {
int dabal,sabal,amt;
public void transfer(int sa,int da,int bal){
amt=bal;
Connection con=null;
Statement st=null;
ResultSet rs=null;
try {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/jlcstudents","root","garima");
st=con.createStatement();
rs=st.executeQuery(String.format("select bal from account where acc_no=%d",da));
if(rs.next())
dabal=rs.getInt(1);
else
throw new InvalidAccountNumber(da);
rs=st.executeQuery(String.format("select bal from account where acc_no=%d", sa));
if(rs.next())
sabal=rs.getInt(1);
else
throw new InvalidAccountNumber(da);
}
catch(Exception e){
e.printStackTrace();
}
try{
con.setAutoCommit(false);
if(amt<=sabal){
String qry=String.format("update account set bal=%d+%d where acc_no=%d", dabal,bal,da);
st.executeUpdate(qry);
String qry1=String.format("update account set bal=%d-%d where acc_no=%d", sabal,bal,sa);
st.executeUpdate(qry1);
con.commit();
System.out.println("Transaction successfull");
}
else
throw new InsufficientFundException();
} catch (Exception e) {
try{
con.rollback();
System.out.println("Transaction rollbacked");
}
catch(SQLException e1){
e1.printStackTrace();
}
}
finally{
try{
if(st!=null)
st.close();
if(con!=null)
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
}
Class Lab25:
package com.jlcindia.transactionmanagement;
public class Lab25 {
public static void main(String[] args){
Account acc=new Account();
acc.transfer(1, 2, 10000);
}
}
答案 0 :(得分:0)
尝试围绕if else语句提供大括号。 可能会有所帮助
if(condition){
statements.....
}
else{
statements....
}
第二个解决方案是 您必须每次都创建一个新的语句对象而不是使用前一个。 当一个对象的工作完成时,通过调用
来关闭它statementObject.close();