This mini banking application uses JDBC to connect and interact with a database for managing user accounts and transactions. JDBC enables executing SQL operations and handling transactions reliably.
In JDBC, a transaction is treated as a single unit of work. By setting setAutoCommit(false), multiple SQL statements can be grouped and changes are only saved with commit(). If any statement fails, a rollback ensures data consistency.
The application provides a menu-driven console interface allowing users to:
- Create an account
- Log in
- View balance
- Transfer money to another customer
Prerequisite
Step-by-Step Implementation
Step 1: Eclipse Project Setup
1. Create Java Project:
- Open Eclipse.
- File -> New -> Java Project ->Name it MiniBankingApp.
2. Create Package
- Right-click src-> New ->Package ->Name it: banking.
3. Create Java Classes
Inside banking package, create:
- bank.java
- bankManagement.java
- connection.java
Project structure:

4. Add MySQL JDBC Connector
- Download MySQL JDBC Connector .jar file.
- Create a folder lib in your project.
- Copy .jar into lib.
- Right-click project -> Build Path ->Configure Build Path -> Libraries -> Add External JARs >->select the connector.
Step 2: Database Setup (MySQL)
Create Database name bank
CREATE DATABASE BANK;
Create Table name customer
JavaCREATEDATABASEBANK;USEBANK;CREATETABLEcustomer(ac_noINTNOTNULLAUTO_INCREMENT,cnameVARCHAR(45)UNIQUENOTNULL,balanceINTDEFAULT1000,pass_codeINTNOTNULL,PRIMARYKEY(ac_no));
outputStep 3: Create DataBase Connection Class
This class is used to load the JDBC driver and establish DB connection.And It use DriverManager.getConnection() with MySQL credentials.
connection.java
Javapackagebanking;importjava.sql.Connection;importjava.sql.DriverManager;publicclassConnection{staticConnectioncon;publicstaticConnectiongetConnection(){try{StringmysqlJDBCDriver="com.mysql.cj.jdbc.Driver";Stringurl="jdbc:mysql://localhost:3306/BANK";Stringuser="root";Stringpass="your_mysql_password";Class.forName(mysqlJDBCDriver);con=DriverManager.getConnection(url,user,pass);}catch(Exceptione){System.out.println("Connection Failed! "+e.getMessage());}returncon;}}Step 4: Business Logic Class
This class handles core operations like account creation and fund transfer. Use PreparedStatement for secure, parameterized queries.
bankmanagment.java
Javapackagebanking;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.sql.*;publicclassBankManagement{privatestaticfinalintNULL=0;staticConnectioncon=Connection.getConnection();// Create AccountpublicstaticbooleancreateAccount(Stringname,intpassCode){if(name.isEmpty()||passCode==NULL){System.out.println("All fields are required!");returnfalse;}try{Stringsql="INSERT INTO customer(cname, balance, pass_code) VALUES (?, 1000, ?)";PreparedStatementps=con.prepareStatement(sql);ps.setString(1,name);ps.setInt(2,passCode);introws=ps.executeUpdate();if(rows==1){System.out.println("Account created successfully! You can now login.");returntrue;}}catch(SQLIntegrityConstraintViolationExceptione){System.out.println("Username already exists! Try another one.");}catch(Exceptione){e.printStackTrace();}returnfalse;}// Login AccountpublicstaticbooleanloginAccount(Stringname,intpassCode){if(name.isEmpty()||passCode==NULL){System.out.println("All fields are required!");returnfalse;}try{Stringsql="SELECT * FROM customer WHERE cname = ? AND pass_code = ?";PreparedStatementps=con.prepareStatement(sql);ps.setString(1,name);ps.setInt(2,passCode);ResultSetrs=ps.executeQuery();BufferedReadersc=newBufferedReader(newInputStreamReader(System.in));if(rs.next()){intsenderAc=rs.getInt("ac_no");intch;while(true){System.out.println("\n Hello, "+rs.getString("cname")+"! What would you like to do?");System.out.println("1) Transfer Money");System.out.println("2) View Balance");System.out.println("3) Logout");System.out.print("Enter Choice: ");ch=Integer.parseInt(sc.readLine());if(ch==1){System.out.print("Enter Receiver A/c No: ");intreceiverAc=Integer.parseInt(sc.readLine());System.out.print("Enter Amount: ");intamt=Integer.parseInt(sc.readLine());if(transferMoney(senderAc,receiverAc,amt)){System.out.println("Transaction successful!");}else{System.out.println("Transaction failed! Please try again.");}}elseif(ch==2){getBalance(senderAc);}elseif(ch==3){System.out.println("Logged out successfully. Returning to main menu.");break;}else{System.out.println("Invalid choice! Try again.");}}returntrue;}else{System.out.println("Invalid username or password!");returnfalse;}}catch(Exceptione){e.printStackTrace();}returnfalse;}// Get BalancepublicstaticvoidgetBalance(intacNo){try{Stringsql="SELECT * FROM customer WHERE ac_no = ?";PreparedStatementps=con.prepareStatement(sql);ps.setInt(1,acNo);ResultSetrs=ps.executeQuery();System.out.println("\n-------------------------------------------------");System.out.printf("%12s %15s %10s\n","Account No","Customer Name","Balance");while(rs.next()){System.out.printf("%12d %15s %10d.00\n",rs.getInt("ac_no"),rs.getString("cname"),rs.getInt("balance"));}System.out.println("-------------------------------------------------");}catch(Exceptione){e.printStackTrace();}}// Transfer MoneypublicstaticbooleantransferMoney(intsender_ac,intreceiver_ac,intamount){if(receiver_ac==NULL||amount==NULL){System.out.println("All fields are required!");returnfalse;}try{con.setAutoCommit(false);StringcheckBalance="SELECT balance FROM customer WHERE ac_no = ?";PreparedStatementps=con.prepareStatement(checkBalance);ps.setInt(1,sender_ac);ResultSetrs=ps.executeQuery();if(rs.next()&&rs.getInt("balance")<amount){System.out.println("Insufficient Balance!");returnfalse;}Stringdebit="UPDATE customer SET balance = balance - ? WHERE ac_no = ?";PreparedStatementpsDebit=con.prepareStatement(debit);psDebit.setInt(1,amount);psDebit.setInt(2,sender_ac);psDebit.executeUpdate();Stringcredit="UPDATE customer SET balance = balance + ? WHERE ac_no = ?";PreparedStatementpsCredit=con.prepareStatement(credit);psCredit.setInt(1,amount);psCredit.setInt(2,receiver_ac);psCredit.executeUpdate();con.commit();returntrue;}catch(Exceptione){try{con.rollback();}catch(SQLExceptionex){ex.printStackTrace();}e.printStackTrace();}returnfalse;}}Step 5: User Interface Class
This class provide a user-friendly, text-based menu to perform banking operations.
Options include.
- create account.
- login.
- view balance.
- transfer money.
bank.java
Javapackagebanking;importjava.io.BufferedReader;importjava.io.InputStreamReader;publicclassBank{publicstaticvoidmain(String[]args){BufferedReadersc=newBufferedReader(newInputStreamReader(System.in));Stringname;intpass_code;intch;while(true){System.out.println("\n===============================");System.out.println(" Welcome to InBank ");System.out.println("===============================");System.out.println("1) Create Account");System.out.println("2) Login Account");System.out.println("3) Exit");try{System.out.print("\nEnter Choice: ");ch=Integer.parseInt(sc.readLine());switch(ch){case1->{System.out.print("Enter Unique Username: ");name=sc.readLine();System.out.print("Enter Password: ");pass_code=Integer.parseInt(sc.readLine());if(BankManagement.createAccount(name,pass_code)){System.out.println("You can now login from the main menu.");}}case2->{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("Login failed. Try again.");}}case3->{System.out.println("Thank you for using InBank! Goodbye.");System.exit(0);}default->System.out.println("Invalid input! Please try again.");}}catch(Exceptione){System.out.println("Please enter a valid input!");}}}}Step 6: Run the Application
Run bank.java from Eclipse to launch the menu-driven interface. Test various features like account creation and money transfer.
===============================
Welcome to InBank
===============================
1) Create Account
2) Login Account
3) Exit
Enter Choice: 2
Enter Username: pritesh
Enter Password: 123
Hello, pritesh! What would you like to do?
1) Transfer Money
2) View Balance
3) Logout
Enter Choice: 2
-------------------------------------------------
Account No Customer Name Balance
112 pritesh 1000.00
-------------------------------------------------
Enter Choice: 1
Enter Receiver A/c No: 110
Enter Amount: 5000
Insufficient Balance!
Transaction failed! Please try again.
Enter Choice: 3
Logged out successfully.
Returning to main menu.


Explore
Java Basics
OOP & Interfaces
Collections
Exception Handling
Java Advanced
Practice Java