1  import java.sql.Connection;
  2  import java.sql.ResultSet;
  3  import java.sql.PreparedStatement;
  4  import java.sql.SQLException;
  5  
  6  /**
  7     A bank account has a balance that can be changed by 
  8     deposits and withdrawals.
  9  */
 10  public class BankAccount
 11  {  
 12     private int accountNumber;
 13  
 14     /**
 15        Constructs a bank account with a given balance.
 16        @param anAccountNumber the account number
 17     */
 18     public BankAccount(int anAccountNumber)
 19     {  
 20        accountNumber = anAccountNumber;
 21     }
 22  
 23     /**
 24        Deposits money into a bank account.
 25        @param amount the amount to deposit
 26     */
 27     public void deposit(double amount)
 28           throws SQLException
 29     {
 30        Connection conn = SimpleDataSource.getConnection();
 31        try
 32        {
 33           PreparedStatement stat = conn.prepareStatement(
 34                 "UPDATE Account"
 35                 + " SET Balance = Balance + ?"
 36                 + " WHERE Account_Number = ?");
 37           stat.setDouble(1, amount);
 38           stat.setInt(2, accountNumber);
 39           stat.executeUpdate();      
 40        }
 41        finally
 42        {
 43           conn.close();
 44        }
 45     }
 46  
 47     /**
 48        Withdraws money from a bank account.
 49        @param amount the amount to withdraw
 50     */
 51     public void withdraw(double amount)
 52           throws SQLException
 53     {
 54        Connection conn = SimpleDataSource.getConnection();
 55        try
 56        {
 57           PreparedStatement stat = conn.prepareStatement(
 58                 "UPDATE Account"
 59                 + " SET Balance = Balance - ?"
 60                 + " WHERE Account_Number = ?");
 61           stat.setDouble(1, amount);
 62           stat.setInt(2, accountNumber);
 63           stat.executeUpdate();      
 64        }
 65        finally
 66        {
 67           conn.close();
 68        }
 69     }
 70  
 71     /**
 72        Gets the balance of a bank account.
 73        @return the account balance
 74     */
 75     public double getBalance()
 76           throws SQLException
 77     {
 78        Connection conn = SimpleDataSource.getConnection();
 79        try
 80        {
 81           double balance = 0;
 82           PreparedStatement stat = conn.prepareStatement(
 83                 "SELECT Balance FROM Account WHERE Account_Number = ?");
 84           stat.setInt(1, accountNumber);
 85           ResultSet result = stat.executeQuery();
 86           if (result.next())
 87              balance = result.getDouble(1);
 88           return balance;
 89        }
 90        finally
 91        {
 92           conn.close();
 93        }
 94     }
 95  }
 96