使用JDBC实现查询和转账操作

Spring整合JDBC实现转账业务demo源代码 Spring整合JDBC实现转账业务demo源代码,具体的解释可以参考本人Spring整合JDBC实现转账业务 立即下载
工具:Myeclipse(Eclipse):
知识点:如何防止SQL注入攻击和JDBC中的修改/删除操作
jar包:
commons-collections4-4.0.jar
commons-dbcp-1.4.jar
commons-pool-1.6.jar
Oracle 11g 11.2.0.1.0 JDBC_ojdbc6.jar

代码都是基于自己写的连接池技术,,已经分享过了
url:http://blog.youkuaiyun.com/coder_hello_world/article/details/78515974

查询没有什么好说的

就说转账中注意的:
我们认为把转账和收款人两次作为一次事物来对待,
所以当用户输入错误的信息的时候,我们不能对用户的金额进行修改
也就是先执行改转账人的SQL语句,如果用户输入的信息错误,
我们不能对用户的信息进行修改,我们应该把两者的同时成功算成一次事物来处理,
所以我们必须先关闭自动提交事物,该成手动提交事物.
当收款人收到金额的时候,我们在对事物进行提交,否则回滚


还有问题.提交的事物改为false,不自动提交,如果下一个用户来了,该怎么执行

.无法进行下一步.所以我们在关闭资源的时候,将事物改为自动提交


package com.csdn.jdbcdemo.date2017_11_17;

import java.io.Reader;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

import org.apache.commons.dbcp.BasicDataSource;

import com.csdn.jdbcdemo.date2017_11_12.BasicDataSourceDemo;

/**
 * 使用JDBC实现的查询和转账操作
 * @author 89155
 *
 */
public class JDBCDemo4 {
	public static void main(String[] args) {
			System.out.println("1.查询       2.转账   ");
			System.out.println("请输入选项");
			Scanner scanner
				= new Scanner(System.in);
			String options
				= scanner.next();
			if(options.matches("[1-3]{1}")){
				int options2 = Integer.parseInt(options);
				switch(options2){
				case 1:
					//查询
					selectDemo(scanner);
					break;
				case 2:
					//转账
					transfer(scanner);
					break;
				}
			}else{
				System.out.println("输入有误!请重新输入!");
			}
		}

		//查询操作
		private static void selectDemo(Scanner scanner) {
			System.out.println("输入你要查询的用户名:");
				String username
				= scanner.next();
			
			try{
				Connection connection
					= BasicDataSourceDemo.getConnection();
				
				String selectSql = "SELECT * FROM EMP"
						+ " WHERE"
						+ " LOWER(EMPNP) = LOWER(?)";
				
				//String selectSql = "SELECT * FROM EMP";
				PreparedStatement pstate
					= connection.prepareStatement(selectSql);
				
				pstate.setString(1,username);;
				ResultSet rs = pstate.executeQuery();
				if(rs.next()){
					
					System.out.println("此用户的信息如下:");
					System.out.println(
							rs.getInt(1)+"\n"
					+rs.getString(2));
				}else{
					System.out.println("没有此用户!");
				}
				rs.close();
				pstate.close();
			}catch(Exception e){
				e.printStackTrace();
			}finally{
				BasicDataSourceDemo.closeConnection();
			}
			
		}
		
		//转账操作
		private static void transfer(Scanner scanner) {
			System.out.println("输入您的账户:");
			String fromuser = scanner.next();
			System.out.println("输入收款人的账户:");
			String toUser = scanner.next();
			System.out.println("输入您要转账的金额:");
			String money = scanner.next();
			System.out.println("输入你的密码:");
			String password = scanner.next();
			
			try{
				Connection connection
					= BasicDataSourceDemo.getConnection();
				//将事物自动提交改为不自动提交
				connection.setAutoCommit(false);
				
				//查询用户是否存在
				String sql = "SELECT * FROM USER_INFODEMO "
						+ "WHERE "
						+ "LOWER(USERNAME) = LOWER(?) "
						+ "AND "
						+ "PASSWORD = ?";
				PreparedStatement pstate = connection.prepareStatement(sql);
				pstate.setString(1, fromuser);
				pstate.setString(2, password);
				ResultSet rs = pstate.executeQuery();
				if(rs.next()){
					//获取该用户的资产
					int sal = rs.getInt("SAL");
					
					//判断用户输入金额是否高于输入金额
					if(sal>Integer.parseInt(money)){
						
						//实现账户的金额减少
						String sql2 = "UPDATE USER_INFODEMO "
								+ "SET "
								+ "SAL = SAL - ? "
								+ "WHERE "
								+ "USERNAME =?";
						PreparedStatement pstate2 = connection.prepareStatement(sql2);
						pstate2.setString(1,money);
						pstate2.setString(2,fromuser);
						
						//实现收款人收到金额
						if(pstate2.executeUpdate()>0){
							String sql3 = "UPDATE USER_INFODEMO "
									+ "SET "
									+ "SAL = SAL + ? "
									+ "WHERE "
									+ "USERNAME =?";
							PreparedStatement pstate3
								= connection.prepareStatement(sql3);
							
							pstate3.setString(1,money);
							pstate3.setString(2,toUser);
							
							if(pstate3.executeUpdate()>0){
								System.out.println("转账成功!");
								//两次都执行成功,都执行提交
								connection.commit();
								pstate2.close();
								pstate3.close();
							}else{
								System.out.println("转账失败!");
								//有一个执行失败,进行回滚
								connection.rollback();
								pstate2.close();
								pstate3.close();
							}
						}else{
							System.out.println("没有此用户:"+toUser);
						}
					}else{
						System.out.println("此账户余额不足!"+fromuser);
					}
				}else{
					System.out.println("您的账户或者密码错误!");
				}
				pstate.close();
				
			}catch(Exception e){
				e.printStackTrace();
			}finally{
				BasicDataSourceDemo.closeConnection();
			}
		}
}


Java jdbc三层及事务(转账案例) 通过转账案例讲解了三层和事务,以及容易出现问题的关键点 立即下载

相关推荐

Java基于JDBC实现事务,银行转账及货物进出库功能示例

主要介绍了Java基于JDBC实现事务,银行转账及货物进出库功能,较为详细的分析了事务操作的原理、实现方法及java基于jdbc连接数据库实现银行事务操作的相关技巧,需要的朋友可以参考下

银行功能实现:转账及余额查询--(含源码,java实现)

银行简易操作,通过jdbc驱动连接数据库,之后对数据库中的account表进行操作,可以查询账户余额和进行转账(存款取款原理一样)

m0_52123595的博客 2847

全网最新首发纯干货:微信数据库表结构完整分析(一)

找不到微信DB表结构说明?找不到具体字段的解释?来这里,全网最完整版!!!

killghosts的博客 4924

JDBC事务管理

package Demo; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class Test { public static void main(String[] args) { Connection con...

知否技术的博客 349

14自由度汽车动力学模型

多体系统分解簧上质量刚体:包含车身主体,具有6个自由度(x/y/z平移 + 俯仰/侧倾/横摆旋转)四个簧下质量刚体:每个车轮独立建模,含垂直跳动(z向)和旋转(绕z轴)自由度总自由度:6(车身) + 4×2(车轮) = 14自由度。

chao189844的博客 1195

从零开始利用MATLAB进行FPGA设计(六)用ADC采集信号教程1

用AN9238采集信号的方法(1),包含PLL、FIFO、ILA的基础教程。

WZT725的博客 3094

Java案例 JDBC+MySQL简单快速实现用户登录功能

1,第一步准备JDBC对应数据库的jar包我这里准备的是mysql的环境 这是mysql对应的jar包:https://downloads.mysql.com/archives/c-j/ 下载完成后解压 把jar包引入到项目当中去这以idea教育版为例 打开项目结构 导入解压的MySQL的jar 文件 2,初始化部分完毕现在开始准备代码部分 其中MySQL的环境部分会专门出一期进行简单讲解 主函数部分,里面主要包括了两个函数一个用来获得...

qq_52314655的博客 4186

动手学Moveit2 | 运行配置好的机械臂功能demo

通过这个小demo你可以直观的感受moveit2的强大,但还有很多需要我们探索的,比如机械臂是如何规划的,规划的过程中如何结合环境信息,规划的时候机械臂如何求解,如何和真实的机械臂对接等等,这些都需要你来进一步探索,今天就到这里,明天给大家秀一下小仙女焊的fishbot运控板。

生活不止眼前的苟且 8879

JDBC之事务案例——转账

事务案例——转账 事务能够控制是否和何时更改应用于数据库,将单个SQL语句或一组SQL语句视为一个逻辑单元,如果任何语句失败,则整个事务将失败 转账问题中转入和转出两个账户的余额变化就是典型的事务案例,一个账户余额增加的同时,另一个转出的账户的余额必然随之减少,这可以看作是一整个事务 根据上述信息创建表money,userid和hold字段分别代表账户id和该id的余额,假设每个账户当前余额都为1000元 JDBC驱动程序默认使用自动提交模式,每个SQL语句在完成后都会提交到数据库,假设发生了异常,sq

技术小白 880

【四足机器人实战】四足机器人运动学、动力学模型

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!四足机器人的运动学和动力学模型是其设计和控制的基础,涉及到如何精确描述和预测机器人在不同条件下的运动状态和行为本文先对四足机器人运动学、动力学模型做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章运动学模型主要关注四足机器人的几何形态和时间序列下的运动特性,而动力学模型则进一步考虑了引起这些运动的力和扭矩的作用效果。运动学模型:运动学模型描述了四足机器人在没有考虑力的影响下的运动特性。

qq_35635374的博客 1055

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

Robot_PLC_HMI_Automation 3292

数据库学习笔记05:模拟转账——JDBC操作事务

JDBC操作事务 要么都成功,要么都失败 ACID原则:原子性、一致性、隔离性、持久性 原子性:要么全部完成,要么都不完成 一致性:结果总数不变 隔离性:多个进程互不干扰 持久性:一旦提交不可逆,持久化到数据库了 隔离性的问题: 脏读: 一个事务读取了另一个没有提交的事务 不可重复读:在同一个事务内,重复读取表中的数据,表发生了改变 虚读(幻读):在一个事务内,读取到了别人插入的数据,导致前后读出来的结果不一致 简单模拟转账,体验事务的要么都成功要么都失败 关闭数据库的自动提交功能,自动开启事务

给bug点个赞 325

电磁场仿真软件:Sonnet_(1).Sonnet软件概述

根据特定需求自定义仿真流程,如多频率点仿真、多边界条件仿真等。

kkchenjj的博客 1449

用java和JDBC实现一个ATM机系统(2.1版)

文章目录用java和JDBC实现一个ATM机系统(2.1版)设计思路源代码需要一个配置文件ATM 类Data类JDBC工具类Bank类User类Demo测试类mysql代码 用java和JDBC实现一个ATM机系统(2.1版) java和数据库实现银行ATM自助取款机,实现功能:用户登录、余额查询、存钱、取钱、转账、修改密码、退出系统。 设计思路 设计六个类包括测试类: 1,ATM类也是主要的类,负责实现用户一系列的操作; 2,Data类,操作数据库的类,作为ATM类的一个属性,主要实现从数据库获取用户信息

weixin_46085748的博客 2145

YOLO26优化:注意力魔改 | EMA:基于跨空间学习的高效多尺度注意力,效果优于ECA、CBAM、CA

加入EMA注意力,一种基于跨空间学习的高效多尺度注意力,效果优于ECA、CBAM、CA等经典注意力。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 333

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

对于多表查询和转账的事务提交

项目列表: 效果展示: 数据库.sql /* Navicat MySQL Data Transfer Source Server : mysql Source Server Version : 50549 Source Host : localhost:3306 Sour...

乔治大哥的博客 539

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring JDBC和事务控制

​ Spring 框架除了提供 IOC 与 AOP 核心功能外,同样提供了基于JDBC 的数据访问功能,使得访问持久层数据更加方便。想要使用 Spring JDBC 环境,需要将JDBC整合到Spring中。构建项目:普通的java项目即可 添加 jdbc 配置文件 在src/main/resources目录下新建db.properties配置文件,并设置对应的配置信息放在配置文件的目的:后续修改的时候直接到配置文件中修改即可。 以下为可选配置 编写 spring 配置文件 编写spring配置文件:app

持续学习,持续更新 2707

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

利用mysql数据库,实现银行ATM功能

利用mysql数据库,实现银行ATM功能 package test01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.u

weixin_44266088的博客 2181

SpringJDBC与声明式事务操作

SpringJDBC以及声明式事务的基本使用

努力学习Java的彬彬的博客 1402

基于java-web入门、面向对象的银行bank系统、基本功能实现及源代码+全部源代码+可运行war包

银行储蓄系统 有mysql代码 整个项目包 以及课程设计文档。数据库用mysql来进行管理存储数据,后端用servlet写。主要实现的功能有注册与登录,定期存钱取钱,活期存钱取钱。以及明细表。主要功能有: 1.用户注册 2.用户登录(余额查询、取款、存款、转账、个人操作记录查询) 3.管理员登录(用户列表展示、用户信息修改、用户信息删除、用户冻结、解冻、添加用户) 涉及到的知识点有: 1.JDBC 2.Servlet 3.过滤器 4…EL与JSTL表达式 项目结构: 操作主界面: 主要界面: 部分代

DrMaker的博客 1688

Java GUI + JDBC 模拟ATM机系统(3.1)

用java GUI 和

weixin_46085748的博客 2597

基于控制台的自动取款机

<br /> <br />      学完了Java的基础,自己动手做了一个基于控制台的自动取款机,不过还有很多不好的地方,望大家指正。<br /> <br />package cn.ambow.chen;<br />import java.sql.Connection;<br />import java.sql.DriverManager;<br />import java.sql.ResultSet;<br />import java.sql.Statement;<br />import java.ut

pm陈卫蒙的专栏 651

Spring纯注解的声明式事务配置

1.jdbcConfig.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=123 2.config.JdbcConf...

LEEWLE的博客 149

JDBCUtils的使用和事务

本次博客带领大家学习JDBCUtils的开发、DML和查询语句的使用、事务的介绍。

lidong777777的博客 471

Java初学笔记41-【自己封装JDBCUtils类、事务、批处理】

Java初学笔记41

爱吃凉拌辣芒果的博客 1337

笔记05-JDBC-事务、反射

jdbc事务 1.什么是事务? 答:一件事或多件事的集合,要么都执行,要么都不执行。 创建数据库表 创建工程导入mysql的驱动包 完成orm映射思想 创建包 1.实体映射 设计Dao(model模型层) 1.com.oracle.test 2.com.oracle.util 3.com.oracle.vo 4.com.oracle.dao (data Acess object) 5.com.oracle.daoImpl 实现Dao 设计需求(service业务层) 1.为什么要在java中添加业务层 .

qq_53855503的博客 163
上一篇: JDBC实现修改和删除操作
下一篇: JDBC中如何通过结果集获取元数据
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值