En cualquier transacción bancaria, hay varias partes involucradas para procesar la transacción, como un comerciante, banco, receptor, etc., por lo que hay varias razones por las que la transacción puede fallar o rechazarse, por lo que para manejar una transacción en Java, hay un JDBC ( Java Database Connectivity) que nos proporciona una API para conectar, ejecutar y obtener datos de cualquier base de datos. Proporciona los estándares de conectividad de bases de datos del lenguaje Java. Se utiliza para escribir programas necesarios para acceder a bases de datos.
Las transacciones en JDBC nos brindan una característica que considera una instrucción SQL completa como una unidad, luego se ejecuta una vez y, si alguna instrucción falla, la transacción completa falla. Para usar la transacción, tenemos que establecer setAutoCommit(false); manualmente, y una vez que todas las sentencias se ejecuten con éxito, será necesario realizar cambios en el método commit() de la base de datos.
En esta mini aplicación bancaria, para manejar una transacción, estamos utilizando JDBC Transaction para que las transacciones sean consistentes. Esta aplicación proporciona una interfaz de consola basada en menús para que un usuario pueda realizar funciones como crear una cuenta, iniciar sesión, ver el saldo y transferir dinero al otro cliente.
Prerrequisito de software:
- mysql
- Eclipse
mysql:
MySQL es un sistema de administración de bases de datos relacionales (RDBMS) con todas las funciones. MySQL es un sistema gratuito de administración de bases de datos relacionales de código abierto que utiliza el lenguaje de consulta estructurado (SQL), el lenguaje más popular para agregar, acceder y procesar datos en una base de datos. MySQL se destaca por su velocidad, confiabilidad y flexibilidad.
Eclipse:
Eclipse es un IDE (entorno de desarrollo interactivo) escrito para desarrollar y depurar (principalmente) código Java. Contiene un espacio de trabajo base y un sistema de complemento extensible para personalizar el entorno.
Configuración de bases de datos:
Paso 1: crear un banco de nombres de base de datos
Paso 2: Crear cliente de nombre de tabla
// 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`) ) ;
Configuración del proyecto Eclipse:
- Crear nuevo proyecto
- Crear un nombre de paquete bancario
Configuración de archivos
Crear una clase de conexión en el paquete bancario
Paso 1: Incluya el controlador JDBC para MySQL
// register jdbc Driver String mysqlJDBCDriver = "com.mysql.cj.jdbc.Driver"; Class.forName(mysqlJDBCDriver);
Paso 2: crear una clase de conexión con el nombre de usuario y la contraseña de MySQL
// Create Connection String url = "jdbc:mysql://localhost:3306/mydata"; String user = "root"; String pass = "123"; con = DriverManager.getConnection(url, user, pass);
>>conexión.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 = "jdbc:mysql://localhost:3306/mydata"; //mysql 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; } }
Propósito: esta clase devuelve una conexión de bases de datos globales utilizando el objeto de conexión, se ejecutarán todos los comandos.
Nota: Cree una clase de gestión bancaria en el paquete bancario
>> gestiónbancaria.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; } }
Propósito: esta clase proporcionará todos los métodos de administración bancaria, como transferir dinero, ver el saldo, crear una cuenta e iniciar sesión.
Nota: Cree una clase de menú de usuario (bank.java) en el paquete bancario.
>>banco.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(); } }
Salida: esta clase proporciona una interfaz basada en menús para el cliente donde el cliente puede crear una cuenta, iniciar sesión en una cuenta, transferir dinero, etc.
Acceso:
->|| Welcome to InBank ||<- 1)Create Account 2)Login Account Enter Input:2 Enter UserName:pritesh Enter Password:123
Ver saldo:
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 -----------------------------------------------------------
Transferir dinero :
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!
Cerrar sesión:
Hallo, pritesh 1)Transfer Money 2)View Balance 5)LogOut Enter Choice:5 MSG : Logout Successfully!
Publicación traducida automáticamente
Artículo escrito por priteshyadav444 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA