package com.bank.abc;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import com.mchange.v2.c3p0.ComboPooledDataSource; //封装银行卡表的数据库操作类 public class CardDAO { //添加卡
public String addCard(String name,String shenfen ,double balance)
{
String rnt=null;
//生成卡号
String cardid=(int)(Math.random()*1000000)+""; //保存数据
try{
//1加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver"); //2获得连接
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","test01","123456"); //3创建声明
Statement st=conn.createStatement();
//4执行语句
String sql="insert into bank values('"+name+"','"+shenfen+"','"+cardid+"','"+balance+"')";
if(st.executeUpdate(sql)>0)
{
return cardid;
}
//5释放资源
st.close();
conn.close();
}catch(Exception e){
e.printStackTrace(); } return rnt;
}
//修改余额
//可以完成取款和存款的功能
public boolean updateBalance(String cardid,double balance)throws Exception
{
boolean rtn=false;
try{
if(balance<0)
{
throw new Exception("余额数据异常");
} //1加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver"); //2获得连接
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","test01","123456"); //3创建声明
Statement st=conn.createStatement();
//4执行语句
String sql="update bank set ba_balance='"+balance+"'where ba_card='"+cardid+"'";
rtn=st.executeUpdate(sql)==1; //5释放资源
st.close();
conn.close(); }catch(Exception e){
e.printStackTrace(); }
return rtn;
} //验证登录
public boolean login(String cardid,String password)
{
boolean rtn=false;
try{
//1加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver"); //2获得连接
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","test01","123456"); //3创建声明
Statement st=conn.createStatement();
//4执行语句
String sql="select ba_card,ba_password from bank where ba_card='"+cardid+"'ba_password='"+password+"'";
ResultSet rs=st.executeQuery(sql); rtn=rs.next();
//5释放资源
st.close();
conn.close(); }catch(Exception e){
e.printStackTrace(); }
return rtn;
} //验证登录
public boolean login1(String cardid,String password)
{
boolean rtn=false; try{
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","test01","123456");
//带有?占位符的语句
String sql="select * from bank where ba_card=? and ba_password=?"; //预编译声明
//优点:1执行效率高,2避免SQL注入
PreparedStatement ps=conn.prepareStatement(sql);
//替换占位符
ps.setString(1, cardid);
ps.setString(2, password); ResultSet rs=ps.executeQuery();
//如果有数据就验证通过
rtn=rs.next(); //数据库元数据
DatabaseMetaData dm= conn.getMetaData();
System.out.println("getURL="+dm.getURL());
System.out.println("getUserName="+dm.getUserName());
System.out.println("getDatabaseProductName="+dm.getDatabaseProductName()); //结果集的元数据
ResultSetMetaData rsd=rs.getMetaData();
System.out.println("getColumnCount="+rsd.getColumnCount());
System.out.println("getColumnName"+rsd.getColumnName(3)); rs.close();
ps.close();
conn.close();
}catch(Exception e)
{
e.printStackTrace();
} return rtn;
} //转账
public boolean zhuanzhang(String cardid_out ,String cardid_in ,double money)
{
boolean rtn=false;
Connection conn=null;
PreparedStatement ps=null;
//
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","test01","123456"); //连接自动提交默认为true
//1.设置连接自动提交为false
conn.setAutoCommit(false); //转出账户 String sql="update bank set ba_balance=ba_balance-"+money+"where ba_card=?"; ps=conn.prepareStatement(sql); ps.setString(1, cardid_out); rtn=ps.executeUpdate()==1; //模拟发生异常
if(rtn)
{
throw new RuntimeException("网络中断");
}
//转入账户
sql="update bank set ba_balance=ba_balance+"+money+"where ba_card=?"; ps=conn.prepareStatement(sql); ps.setString(1, cardid_in); rtn=ps.executeUpdate()==1; //2提交事务
conn.commit(); } catch (Exception e) {
// 3.回滚事务
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
finally
{
try {
ps.close();
conn.close();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} } return rtn;
} //测试连接池
public void testC3P0()
{
//连接池的形式是DataSource
//构建连接池对象
ComboPooledDataSource cp=new ComboPooledDataSource(); //配置连接池
try {
//设置驱动
cp.setDriverClass("oracle.jdbc.driver.OracleDriver");
//设置url
cp.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:orcl");
//设置用户
cp.setUser("test01");
//设置密码
cp.setPassword("123456");
//设置连接最小数量
cp.setMinPoolSize(5);
//设置连接最大数量
cp.setMaxPoolSize(20);
//设置初始连接数量
cp.setInitialPoolSize(5); Connection conn=cp.getConnection(); String cardid=(int)(Math.random()*1000000)+""; String sql="insert into bank(ba_name,ba_shenfen,ba_card,ba_balance,ba_password)"+
"values(?,?,?,?,?)"; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1, "张三");
ps.setString(2, "123456789012345678");
ps.setString(3, cardid);
ps.setDouble(4, 100);
ps.setString(5, "123456"); ps.executeUpdate(); System.out.println("添加成功"); ps.close();
conn.close(); } catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} //测试连接池
//通过配置文件,构建连接池
//连接池的形式是DataSource
//构建连接池对象
ComboPooledDataSource cp=new ComboPooledDataSource("helloc3p0"); public void test1C3P0()
{ //配置连接池
try { Connection conn=cp.getConnection(); String cardid=(int)(Math.random()*1000000)+""; String sql="insert into bank(ba_name,ba_shenfen,ba_card,ba_balance,ba_password)"+
"values(?,?,?,?,?)"; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1, "李四");
ps.setString(2, "123456789012345678");
ps.setString(3, cardid);
ps.setDouble(4, 100);
ps.setString(5, "123456"); ps.executeUpdate(); System.out.println("添加成功"); ps.close();
conn.close(); } catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} //查询账户,获取账户信息
//返回实体类装载的数据
public bank getcard(String cardid)
{
bank ba=null;
try {
Connection conn=cp.getConnection(); String sql="select * from bank where ba_card=?"; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1, cardid); ResultSet rs=ps.executeQuery(); if(rs.next())
{
//使用实体类装载数据
ba=new bank();
ba.setBa_card(rs.getString("ba_card"));
ba.setBa_name(rs.getString("ba_name"));
ba.setBa_shenfen(rs.getString("ba_shenfen"));
ba.setBa_balance(rs.getDouble("ba_balance"));
ba.setBa_password(rs.getString("ba_password")); rs.close();
ps.close();
conn.close();
}
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} return ba; } //查询所有记录
public List<bank> getAll()
{
List<bank> li=new ArrayList<>();
try {
Connection conn=cp.getConnection(); Statement st=conn.createStatement(); ResultSet rs=st.executeQuery("select * from bank"); while(rs.next())
{
bank ba=new bank();
ba.setBa_card(rs.getString("ba_card"));
ba.setBa_name(rs.getString("ba_name"));
ba.setBa_shenfen(rs.getString("ba_shenfen"));
ba.setBa_balance(rs.getDouble("ba_balance"));
ba.setBa_password(rs.getString("ba_password")); li.add(ba);
} rs.close();
st.close();
conn.close(); } catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return li;
} }

测试:

package com.bank.abc;

import static org.junit.Assert.*;

import java.util.List;

import org.junit.Test;

public class testatm {

    @Test
public void testInsert() { //测试发卡
CardDAO cd=new CardDAO();
String cardid=cd.addCard("李凯", "220521199202025439", 0);
if(cardid !=null)
{
System.out.println("卡号"+cardid);
}
else
{
System.out.println("发卡失败");
}
} @Test
public void testInsert1() {
CardDAO cd=new CardDAO();
try{
if(cd.updateBalance("064532", 100))
{
System.out.println("存款成功");
}else{
System.out.println("存款失败");
}
}catch(Exception e){
e.printStackTrace();
}
} @Test
public void testInsert2() {
CardDAO cd=new CardDAO();
try{
if(cd.login(" 123453' or 1=1--", "321312"))
{
System.out.println("");
} }catch(Exception e){
e.printStackTrace();
}
}
@Test
public void testInsert3() {
CardDAO cd=new CardDAO();
try{
if(cd.login1("362569", "123456"))
{
System.out.println("登录成功");
}else{
System.out.println("登录失败");
} }catch(Exception e){
e.printStackTrace();
}
}
//测试转账 @Test
public void testInsert4() {
CardDAO cd=new CardDAO();
try{
if(cd.zhuanzhang("949806", "362569",5000))
{
System.out.println("转账成功");
}else{
System.out.println("转账失败");
} }catch(Exception e){
e.printStackTrace();
}
} //测试连接池
@Test
public void testInsert5() {
CardDAO cd=new CardDAO();
cd.testC3P0();
}
//测试连接池
@Test
public void testInsert6() {
CardDAO cd=new CardDAO();
cd.test1C3P0();
} //测试获取卡信息
@Test
public void testInsert7() { CardDAO cd=new CardDAO();
bank ba=cd.getcard("362569");
System.out.println(ba);
} //测试获取所有卡信息
@Test
public void testInsert8() { CardDAO cd=new CardDAO();
List<bank> li=cd.getAll();
for(bank ba:li)
{
System.out.println(ba);
} }
}

Java针对数据库增删改查代码的更多相关文章

  1. java DMO及增删改查代码的自动生成

    在web开发过程中,尤其是后台管理系统的开发中,少不了增删改成的基础操作,原来我自己的做法是一份一份的拷贝粘贴,然后修改其中的不同,然而这样既枯燥无味又浪费了大量的时间,所以根据自己项目结构的特点写了 ...

  2. java操作数据库增删改查的小工具1--TxQueryRunner

    在java程序中,一般使用jdbc连接数据库,比较麻烦,在看传智教程时学了一个工具类,用于简化与数据库之间的操作步骤,就是TxQueryRunner,他是QueryRunner的子类,用起来和他是一样 ...

  3. Java实现数据库增删改查

    代码示例: import java.sql.*; public class Renewal { // 创建类static Connection con; // 声明Connection对象static ...

  4. java操作数据库增删改查的小工具2--TxQueryRunner

    当涉及到多表查询时,如数据库中有两张表分别为t_person和t_address,表结构如下: 其中t_person的外键为t-address的主键aid, 新建两个javaBean类,Person ...

  5. Android(java)学习笔记193:利用谷歌API对数据库增删改查(推荐使用)

    接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1.首先项目图: 2.这里的布局文件activity_main.xml: <LinearLayout xmlns:android ...

  6. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

  7. Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)

    接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...

  8. 最简单的jsp+servlet的增删改查代码

    package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...

  9. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

随机推荐

  1. mongodb提示api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案

    mongodb提示api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案 官方最新版的mongodb需要: VC++2015 RC x64的支持,否则会报出

  2. Copy-On-Write容器

    Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...

  3. 《DSP using MATLAB》示例Example5.22

    代码: Nmax = 2048; fft_time = zeros(1, Nmax); for n = 1:1:Nmax x=rand(1,n); t=clock; fft(x); fft_time( ...

  4. 【刷题笔记】I'm stuck! (迷宫)-----java方案

    题目描述 : 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此 ...

  5. iOS 面试题搜集

    1.#import和#include的区别,@class代表什么? 2.浅拷贝和深拷贝区别是什么? 3.Objective-C中类别和类扩展的区别? 4.Objective-C堆和栈的区别? 5.内存 ...

  6. 识别快递单号(2) - 加载图片到canvas

    传送门: 识别快递单号(1) - 图像处理   转载请注明出处: http://www.cnblogs.com/zaiyuzhong/p/load-image-to-canvas.html 上篇说到我 ...

  7. BZOJ4293: [PA2015]Siano

    Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘米. Byteasar一共会进行m ...

  8. jQuery的加法运算.

    jQuery的加法运算. 加法运算 ?想必大家听到这都会不屑了,加法运算这是多么简单的运算.然而有的时候在jQuery也让人挺头疼的. 常规的是: var num1 = 123; var num2=1 ...

  9. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  10. redis 的理解

    1.Redis使用 C语言开发的.Redis 约定此版本号,为偶数的版本是稳定版(如:2.4版 2.6版),奇数版是非稳定版(如:2.5版 2.7版) 2.Redis 数据库中的所有的数据都存储在内存 ...