In any Bank Transaction, there are several parties involved to process transaction like a merchant, bank, receiver, etc. so there are several numbers reasons that transaction may get failed, declined, so to handle a transaction in Java, there is a JDBC (Java Database Connectivity) which provides us an API to connect, execute, fetch data from any databases. It provides the language Java database connectivity standards. It is used to write programs required to access databases.
Transactions in JDBC provide us a feature that considers a complete SQL statement as one unit, then executes once, and if any statement fails, the entire transaction fails. To use transaction, we have to set setAutoCommit(false); manually, and once all the statements are executed successfully, making changes in the database’s commit() method will be required.
In this Mini Banking Application, to handle a transaction, we are using JDBC Transaction to make transactions consistent. This Application Provides Menu-Driven Console Interface to a User Using that User can perform functions like create Account, Login, View Balance And Transfer Money To The Other Customer.
Software Prerequisite:
- MySQL
- Eclipse
MySQL:
MySQL is a full-featured relational database management system (RDBMS). MySQL is a free, open-source relational database management system that uses Structured Query Language (SQL), the most popular language for adding, accessing, and processing data in a database. MySQL is noted for its speed, reliability, and flexibility.
Eclipse:
Eclipse is an IDE (interactive development environment) written to develop and debug (primarily) Java code. It contains a base workspace and an extensible plug-in system for customizing the environment.
Databases Setup:
Step 1: Create Database name bank
Step 2: Create Table name customer
// Create a database CREATE DATABASE BANK; // Create table CREATE TABLE `customer` ( `ac_no` int NOT NULL AUTO_INCREMENT, `cname` varchar(45) DEFAULT NULL, `balance` varchar(45) DEFAULT NULL, `pass_code` int DEFAULT NULL, PRIMARY KEY (`ac_no`), UNIQUE KEY `cname_UNIQUE` (`cname`) ) ;
Eclipse Project Setup:
- Create New Project
- Create A package name banking
File Configuration
Create a Connection class in the banking package
Step 1: Include JDBC Driver for MySQL
// register jdbc Driver String mysqlJDBCDriver = "com.mysql.cj.jdbc.Driver"; Class.forName(mysqlJDBCDriver);
Step 2: Create Connection Class using MySQL username and password
// Create Connection String url = "jdbc:mysql://localhost:3306/mydata"; String user = "root"; String pass = "123"; con = DriverManager.getConnection(url, user, pass);
>>connection.java
Java
package banking; import java.sql.Connection; import java.sql.DriverManager; // Global connection Class public class connection { static Connection con; // Global Connection Object public static Connection getConnection() { try { String mysqlJDBCDriver = "com.mysql.cj.jdbc.Driver" ; //jdbc driver String url String user = "root" ; //mysql username String pass = "Pritesh4@" ; //mysql passcode Class.forName(mysqlJDBCDriver); con = DriverManager.getConnection(url, user, pass); } catch (Exception e) { System.out.println( "Connection Failed!" ); } return con; } } |
Purpose: This class returns a Global Databases Connection using the object of connection all the commands will be executed.
Note: Create a Bank Management Class in the banking package
>> bankmanagment.java
Java
package banking; import java.io.BufferedReader; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.SQLIntegrityConstraintViolationException; import java.sql.Statement; public class bankManagement { // these class provides all // bank method private static final int NULL = 0 ; static Connection con = connection.getConnection(); static String sql = "" ; public static boolean createAccount(String name, int passCode) // create account function { try { // validation if (name == "" || passCode == NULL) { System.out.println( "All Field Required!" ); return false ; } // query Statement st = con.createStatement(); sql = "INSERT INTO customer(cname,balance,pass_code) values('" + name + "',1000," + passCode + ")" ; // Execution if (st.executeUpdate(sql) == 1 ) { System.out.println(name + ", Now You Login!" ); return true ; } // return } catch (SQLIntegrityConstraintViolationException e) { System.out.println( "Username Not Available!" ); } catch (Exception e) { e.printStackTrace(); } return false ; } public static boolean loginAccount(String name, int passCode) // login method { try { // validation if (name == "" || passCode == NULL) { System.out.println( "All Field Required!" ); return false ; } // query sql = "select * from customer where cname='" + name + "' and pass_code=" + passCode; PreparedStatement st = con.prepareStatement(sql); ResultSet rs = st.executeQuery(); // Execution BufferedReader sc = new BufferedReader( new InputStreamReader(System.in)); if (rs.next()) { // after login menu driven interface method int ch = 5 ; int amt = 0 ; int senderAc = rs.getInt( "ac_no" ); ; int receiveAc; while ( true ) { try { System.out.println( "Hallo, " + rs.getString( "cname" )); System.out.println( "1)Transfer Money" ); System.out.println( "2)View Balance" ); System.out.println( "5)LogOut" ); System.out.print( "Enter Choice:" ); ch = Integer.parseInt( sc.readLine()); if (ch == 1 ) { System.out.print( "Enter Receiver A/c No:" ); receiveAc = Integer.parseInt( sc.readLine()); System.out.print( "Enter Amount:" ); amt = Integer.parseInt( sc.readLine()); if (bankManagement .transferMoney( senderAc, receiveAc, amt)) { System.out.println( "MSG : Money Sent Successfully!\n" ); } else { System.out.println( "ERR : Failed!\n" ); } } else if (ch == 2 ) { bankManagement.getBalance( senderAc); } else if (ch == 5 ) { break ; } else { System.out.println( "Err : Enter Valid input!\n" ); } } catch (Exception e) { e.printStackTrace(); } } } else { return false ; } // return return true ; } catch (SQLIntegrityConstraintViolationException e) { System.out.println( "Username Not Available!" ); } catch (Exception e) { e.printStackTrace(); } return false ; } public static void getBalance( int acNo) // fetch balance method { try { // query sql = "select * from customer where ac_no=" + acNo; PreparedStatement st = con.prepareStatement(sql); ResultSet rs = st.executeQuery(sql); System.out.println( "-----------------------------------------------------------" ); System.out.printf( "%12s %10s %10s\n" , "Account No" , "Name" , "Balance" ); // Execution while (rs.next()) { System.out.printf( "%12d %10s %10d.00\n" , rs.getInt( "ac_no" ), rs.getString( "cname" ), rs.getInt( "balance" )); } System.out.println( "-----------------------------------------------------------\n" ); } catch (Exception e) { e.printStackTrace(); } } public static boolean transferMoney( int sender_ac, int reveiver_ac, int amount) throws SQLException // transfer money method { // validation if (reveiver_ac == NULL || amount == NULL) { System.out.println( "All Field Required!" ); return false ; } try { con.setAutoCommit( false ); sql = "select * from customer where ac_no=" + sender_ac; PreparedStatement ps = con.prepareStatement(sql); ResultSet rs = ps.executeQuery(); if (rs.next()) { if (rs.getInt( "balance" ) < amount) { System.out.println( "Insufficient Balance!" ); return false ; } } Statement st = con.createStatement(); // debit con.setSavepoint(); sql = "update customer set balance=balance-" + amount + " where ac_no=" + sender_ac; if (st.executeUpdate(sql) == 1 ) { System.out.println( "Amount Debited!" ); } // credit sql = "update customer set balance=balance+" + amount + " where ac_no=" + reveiver_ac; st.executeUpdate(sql); con.commit(); return true ; } catch (Exception e) { e.printStackTrace(); con.rollback(); } // return return false ; } } |
Purpose: This class will provide all the methods of Bank Management like transferring money, viewing balance, creating an account, and log in.
Note: Create a User Menu Class (bank.java) in the banking package.
>>bank.java
Java
package banking; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class bank { public static void main(String args[]) //main class of bank throws IOException { BufferedReader sc = new BufferedReader( new InputStreamReader(System.in)); String name = "" ; int pass_code; int ac_no; int ch; while ( true ) { System.out.println( "\n ->|| Welcome to InBank ||<- \n" ); System.out.println( "1)Create Account" ); System.out.println( "2)Login Account" ); try { System.out.print( "\n Enter Input:" ); //user input ch = Integer.parseInt(sc.readLine()); switch (ch) { case 1 : try { System.out.print( "Enter Unique UserName:" ); name = sc.readLine(); System.out.print( "Enter New Password:" ); pass_code = Integer.parseInt( sc.readLine()); if (bankManagement.createAccount( name, pass_code)) { System.out.println( "MSG : Account Created Successfully!\n" ); } else { System.out.println( "ERR : Account Creation Failed!\n" ); } } catch (Exception e) { System.out.println( " ERR : Enter Valid Data::Insertion Failed!\n" ); } break ; case 2 : try { System.out.print( "Enter UserName:" ); name = sc.readLine(); System.out.print( "Enter Password:" ); pass_code = Integer.parseInt( sc.readLine()); if (bankManagement.loginAccount( name, pass_code)) { System.out.println( "MSG : Logout Successfully!\n" ); } else { System.out.println( "ERR : login Failed!\n" ); } } catch (Exception e) { System.out.println( " ERR : Enter Valid Data::Login Failed!\n" ); } break ; default : System.out.println( "Invalid Entry!\n" ); } if (ch == 5 ) { System.out.println( "Exited Successfully!\n\n Thank You :)" ); break ; } } catch (Exception e) { System.out.println( "Enter Valid Entry!" ); } } sc.close(); } } |
Output: This class provides a Menu-Driven Interface to the Customer where the Customer can create Account, Login Account, Transfer Money, etc.
Login:
->|| Welcome to InBank ||<- 1)Create Account 2)Login Account Enter Input:2 Enter UserName:pritesh Enter Password:123
View Balance:
Enter UserName:pritesh Enter Password:123 Hallo, pritesh 1)Transfer Money 2)View Balance 5)LogOut Enter Choice:2 ----------------------------------------------------------- Account No Name Balance 112 pritesh 0.00 -----------------------------------------------------------
Transfer Money:
Hallo, pritesh 1)Transfer Money 2)View Balance 5)LogOut Enter Choice:1 Enter Receiver A/c No:110 Enter Amount:5000 Insufficient Balance! ERR : Failed!
Logout:
Hallo, pritesh 1)Transfer Money 2)View Balance 5)LogOut Enter Choice:5 MSG : Logout Successfully!