模拟银行转账
项目准备前提
1.准备数据表
2.准备实验数据
3.jar包准备
4.准备好JDBC工具类
1.准备数据表
创建用户数据表,所需字段有:用户id, 用户姓名, 用户密码, 用户金额.
CREATE TABLE `account` (
`aid` int(11) NOT NULL AUTO_INCREMENT,
`uname` varchar(255) DEFAULT NULL,
`upwd` varchar(255) DEFAULT NULL,
`balance` decimal(8,2) DEFAULT NULL,
PRIMARY KEY (`aid`)
) ENGINE=InnoDB;
一个简单数据表创建就完成了
2.准备实验数据
INSERT INTO `account` VALUES (1, 'tesDest','112342', 1200.00);
INSERT INTO `account` VALUES (2, 'segvcw', '223352',680.50);
这边我们插入两条实验数据,用于模拟两个用户.
3.jar包准备
以下是我自己使用的jar包,分别是在项目下的lib目录下和web的项目leb目录下
注意 : 因为这边是使用web项目所以要先给项目加入web框架
3.1 加入web框架
选中项目文件夹右键, 点击如图选项:
勾选如图中的选项,后点击ok
4.准备JDBC工具类
我们使用JDBC技术时常需要进行许多的重复操作,于是我们可以将一些操作打包成工具类. 方便我们后面的操作.
package com.huawei.util;
import com.alibaba.druid.pool.DruidDataSource;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
* JDBC工具类【加入事务控制 + 线程 + Druid连接池】
*/
public class DBUtils {
static String USER=null;
static String USER_PASS=null;
static String DB_URL=null;
static String DRIVER_CLASS=null;
private static DataSource dataSource;
//容器变量 [ThreadLocal用于隔离多线程并发 产生的数据混乱]
private static ThreadLocal<Connection> local = new ThreadLocal<>();
/**
* 静态代码块加载属性配置文件
*/
static {
Properties config=new Properties();
try {
//找到文件
//InputStream is= JdbcUtil.class.getResourceAsStream("/db.properties");
InputStream is= DBUtils.class.getClassLoader().getResourceAsStream("db.properties");
//并读取到内存
config.load(is);
//读取属性数据的key
//DB_URL = config.getProperty("jdbc.url");
//USER = config.getProperty("jdbc.username");
//USER_PASS = config.getProperty("jdbc.password");
DRIVER_CLASS = config.getProperty("jdbc.driverClassName");
//初始化Durid连接池数据源
DruidDataSource dds = new DruidDataSource();
dds.configFromPropety(config);//加载属性文件到数据源对象
dataSource = dds;
} catch (Exception e) {
e.printStackTrace();
}
}
public static DataSource getDataSource(){
return dataSource;
}
/**
* 注册驱动
*/
static {
try {
Class.forName(DRIVER_CLASS);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取链接对象
* @return
*/
public static Connection getConn(){
if(local.get()==null) {
//当前线程是否有连接对象
Connection conn = null;
try {
//conn = DriverManager.getConnection(DB_URL, USER, USER_PASS);
conn = dataSource.getConnection();
local.set(conn);//放入当前线程对象中
} catch (Exception e) {
e.printStackTrace();
}
//return conn;
}