A Mini Banking Application in Java is a console-based project that demonstrates how Java applications can interact with a MySQL database using JDBC (Java Database Connectivity). It performs basic banking operations while using database transactions to maintain data consistency during money transfers.
- Allows users to create an account and log in.
- Enables users to view their current account balance.
- Supports money transfers between customer accounts.
- Uses JDBC transaction management with commit() and rollback() to ensure reliable transactions.
Prerequisite
- MySQL
- Eclipse
- MySQL JDBC Connector (JAR)
- Java Development Kit(JDK 17 or later)
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
- DatabaseConnection.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
CREATE DATABASE BANK;
USE BANK;
CREATE TABLE customer (
ac_no INT NOT NULL AUTO_INCREMENT,
cname VARCHAR(45) UNIQUE NOT NULL,
balance INT DEFAULT 1000,
pass_code INT NOT NULL,
PRIMARY KEY (ac_no)
);

Step 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.
DatabaseConnection.java
package banking;
import java.sql.Connection;
import java.sql.DriverManager;
public class DatabaseConnection {
private static Connection con;
public static Connection getConnection() {
try {
String url = "jdbc:mysql://localhost:3306/BANK";
String user = "root";
String pass = "your_mysql_password";
con = DriverManager.getConnection(url, user, pass);
}
catch (Exception e) {
System.out.println(
"Connection Failed! " + e.getMessage()
);
}
return con;
}
}
Step 4: Business Logic Class
This class handles core operations like account creation and fund transfer. Use PreparedStatement for secure, parameterized queries.
bankManagement.java
package banking;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.*;
public class BankManagement {
private static final int NULL = 0;
static Connection con
= DatabaseConnection.getConnection();
// Create Account
public static boolean createAccount(String name,
int passCode)
{
if (name.isEmpty() || passCode == NULL) {
System.out.println("All fields are required!");
return false;
}
try {
String sql
= "INSERT INTO customer(cname, balance, pass_code) VALUES (?, 1000, ?)";
PreparedStatement ps
= con.prepareStatement(sql);
ps.setString(1, name);
ps.setInt(2, passCode);
int rows = ps.executeUpdate();
if (rows == 1) {
System.out.println(
"Account created successfully! You can now login.");
return true;
}
}
catch (SQLIntegrityConstraintViolationException e) {
System.out.println(
"Username already exists! Try another one.");
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
// Login Account
public static boolean loginAccount(String name,
int passCode)
{
if (name.isEmpty() || passCode == NULL) {
System.out.println("All fields are required!");
return false;
}
try {
String sql
= "SELECT * FROM customer WHERE cname = ? AND pass_code = ?";
PreparedStatement ps
= con.prepareStatement(sql);
ps.setString(1, name);
ps.setInt(2, passCode);
ResultSet rs = ps.executeQuery();
BufferedReader sc = new BufferedReader(
new InputStreamReader(System.in));
if (rs.next()) {
int senderAc = rs.getInt("ac_no");
int ch;
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: ");
int receiverAc = Integer.parseInt(
sc.readLine());
System.out.print("Enter Amount: ");
int amt = Integer.parseInt(
sc.readLine());
if (transferMoney(senderAc,
receiverAc,
amt)) {
System.out.println(
"Transaction successful!");
}
else {
System.out.println(
"Transaction failed! Please try again.");
}
}
else if (ch == 2) {
getBalance(senderAc);
}
else if (ch == 3) {
System.out.println(
"Logged out successfully. Returning to main menu.");
break;
}
else {
System.out.println(
"Invalid choice! Try again.");
}
}
return true;
}
else {
System.out.println(
"Invalid username or password!");
return false;
}
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
// Get Balance
public static void getBalance(int acNo)
{
try {
String sql
= "SELECT * FROM customer WHERE ac_no = ?";
PreparedStatement ps
= con.prepareStatement(sql);
ps.setInt(1, acNo);
ResultSet rs = 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 (Exception e) {
e.printStackTrace();
}
}
// Transfer Money
public static boolean transferMoney(int sender_ac,
int receiver_ac,
int amount)
{
if (receiver_ac == NULL || amount == NULL) {
System.out.println("All fields are required!");
return false;
}
try {
con.setAutoCommit(false);
String checkBalance
= "SELECT balance FROM customer WHERE ac_no = ?";
PreparedStatement ps
= con.prepareStatement(checkBalance);
ps.setInt(1, sender_ac);
ResultSet rs = ps.executeQuery();
if (rs.next()
&& rs.getInt("balance") < amount) {
System.out.println("Insufficient Balance!");
return false;
}
String debit
= "UPDATE customer SET balance = balance - ? WHERE ac_no = ?";
PreparedStatement psDebit
= con.prepareStatement(debit);
psDebit.setInt(1, amount);
psDebit.setInt(2, sender_ac);
psDebit.executeUpdate();
String credit
= "UPDATE customer SET balance = balance + ? WHERE ac_no = ?";
PreparedStatement psCredit
= con.prepareStatement(credit);
psCredit.setInt(1, amount);
psCredit.setInt(2, receiver_ac);
psCredit.executeUpdate();
con.commit();
return true;
}
catch (Exception e) {
try {
con.rollback();
}
catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
}
return false;
}
}
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
package banking;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Bank {
public static void main(String[] args) {
BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
String name;
int pass_code;
int ch;
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) {
case 1 -> {
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.");
}
}
case 2 -> {
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.");
}
}
case 3 -> {
System.out.println("Thank you for using InBank! Goodbye.");
System.exit(0);
}
default -> System.out.println("Invalid input! Please try again.");
}
} catch (Exception e) {
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.

