使用Oracle与java\JDBC 包装一个方法,同时可以实现增、删、改

包装一个方法同时可以实现增、删、改,增强代码的复用性

使用Connection.createPrepareStatement(sql);

创建调用Preparemente

class JDBC_data thows Exception{

public Preparement getPreparement(String sql){

................具体代码如下

              return    preparstatement;

}

分析:

若想同时实现增删该查,必须保证参数地方输入的语句(sql)可以不断变化,还有就是对不同类型参数的预处理

由此可以推断出参数必须包含String sql,若想实现参数可变输入还要定义一个Object[ ]数组

由此推出大概框架为:

public void update(String sql,object[ ] values){

                      具体代码如下

}

通过模拟ATM存取/款/创建用户/删除用户来测(没有完全封装,只是一个简单的利用)

数据库的表格式如下: 

username password balance
     
     

//ATM PO

package ATM_PO;
public class ATM {
		private String username;
		private String password;
		private int balance;
		public String getUsername() {
			return username;
		}
		public void setUsername(String username) {
			this.username = username;
		}
		public String getPassword() {
			return password;
		}
		public void setPassword(String password) {
			this.password = password;
		}
		public int getBalance() {
			return balance;
		}
		public void setBalance(int balance) {
			this.balance = balance;
		}
		@Override
		public String toString() {
			return "ATM [username=" + username + ", password=" + password + ", balance=" + balance + "]";
		}		
}

//数据连接

package DATA;
import java.sql.Connection;
import java.sql.DriverManager;
/**
 * 通过预处理,封装实现 增删该查最简化
 * 首先:1.要使用预处理,目的:提高代码的通用性
 * 		2.建立一个对象映射数据库中的对象,此处以模拟ATM为例,建立一个ATM(PO)
 * 		3.通过对象数组封装每条对象(例如:Object[]{atm.getusername()...})的各个列,
 * 			通过prepare.setObject()可以不用考虑参数类型带来的影响
 * 			注意事项:在插入对象时要注意对象的顺序要与SQL中的数据对应,否则数据会混乱
 * */
//此处封装一个Prepare对象的创建方法
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCdatabase {
	//为了提高代码复用性,sql要作为参数写入
	public PreparedStatement getPrepare(String sql) {
		PreparedStatement ps=null;
		try {
			//加载驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//连接数据库
			Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "123456");
			ps=conn.prepareStatement(sql);
		} catch (ClassNotFoundException e) {
			System.out.println("驱动加载失败!");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("数据库连接失败!");
			e.printStackTrace();
		}
		return ps;
	}
	public Connection getConn() {
		Connection conn=null;		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:", "scott", "123456");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
		
	}
}

数据连接层

package ATM_DAO;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import ATM_PO.ATM;
import DATA.JDBCdatabase;

public class AtmDao {
	//封装一个可以数据库可以增、删、改的方法,为了提高代码的复用性和获得参数的个数与类型,使用Object[]
	/**
	 * 通过此方法可以更增、删、改*/
	public void update(String sql,Object[] values) {
		//获得prepareStatement
		PreparedStatement ps=new JDBCdatabase().getPrepare(sql);
		//通过for循环将参数变量插入sql中的问号中,此处注意顺序问题
		for(int i=0;i<values.length;i++) {
			try {
				ps.setObject(i+1, values[i]);
			} catch (SQLException e) {
				System.out.println("预处理失败");
				e.printStackTrace();
			}
		}
		try {
			ps.executeUpdate();
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	//对数据库的查询
	public ATM queryDao(String username) {
			ATM atm=null;
			PreparedStatement ps=null;
		try {
			String sql="select * from tb_atm where username=?";
			ps=new JDBCdatabase().getPrepare(sql);
			ps.setString(1, username);
			ResultSet rs=ps.executeQuery();
			if(rs.next()) {
				atm=new ATM();
				atm.setUsername(rs.getString("username"));
				atm.setPassword(rs.getString("pasword"));
				atm.setBalance(rs.getInt("balance"));
			}
			ps.close();
		} catch (SQLException e) {		
			e.printStackTrace();
		}	
		return atm;	
	}
	//余额查询
	public int yueDao(String username) {
		return queryDao(username).getBalance();
	}
}

业务层(service)

package ATM_service;

import ATM_DAO.AtmDao;
import ATM_PO.ATM;

public class Atm_Service {
	//存款
	public void cunkuan(String username,int money) {
		String sql="update tb_atm set balance= ? where username=?";
		AtmDao ad=new AtmDao();
		ATM atm=ad.queryDao(username);
		atm.setBalance(atm.getBalance()+money);
		Object[] values= {atm.getBalance(),atm.getUsername()};
		ad.update(sql,values);
	}
	//取款
	public void qukuan(String username,int money) {
		String sql="update tb_atm set balance= ? where username=?";
		AtmDao ad=new AtmDao();
		ATM atm=ad.queryDao(username);
		if(money<atm.getBalance())
		{
		atm.setBalance(atm.getBalance()-money);
		Object[] values= {atm.getBalance(),atm.getUsername()};
		ad.update(sql,values);
		}
	}
	//转账
	public void zhuanzhang(String username,int money,String rusername) {
		AtmDao ad=new AtmDao();
		//转账人
		String sql="update tb_atm set balance= ? where username=?";
		ATM atm=ad.queryDao(username);
		if(money<atm.getBalance())
		{
			atm.setBalance(atm.getBalance()-money);
			Object[] values= {atm.getBalance(),atm.getUsername()};
			ad.update(sql,values);
		//收款人
			String sql1="update tb_atm set balance= ? where username=?";
			ATM atm1=ad.queryDao(rusername);
			atm1.setBalance(atm1.getBalance()+money);
			Object[] values1= {atm1.getBalance(),atm1.getUsername()};
			ad.update(sql1,values1);
			System.out.println("转账成功");
		}
		
	}
	//余额查询
	public int yue(String username) {
		AtmDao ad=new AtmDao();
		return ad.yueDao(username);
	}
	//创建用户
	public void createUser(ATM atm) {
		AtmDao ad=new AtmDao();
		String sql="insert into tb_atm (username,pasword,balance)values(?,?,?)";
		ad.update(sql, new Object [] {atm.getUsername(),atm.getPassword(),atm.getBalance()});
	}
	//注销用户
	public void delateUser(String username) {
		AtmDao ad=new AtmDao();
		String sql="delete from tb_atm where username=?";
		ad.update(sql, new Object[] {username});
		if(ad.queryDao(username)==null) {
			System.out.println("删除用户成功");
		}
	}
}

//测试

import ATM_PO.ATM;
import ATM_service.Atm_Service;

public class test {
	public static void main(String[] args) {
		Atm_Service as=new Atm_Service();
		//cunkuan
		System.out.println("马云"+as.yue("马云"));
		as.cunkuan("马云", 10000);
		System.out.println("马云"+as.yue("马云"));
		//qukuan
		as.qukuan("马云", 10000);
		System.out.println("马云"+as.yue("马云"));
		//测试转账
		System.out.println("小王"+as.yue("小王"));
		as.zhuanzhang("马云", 10000, "小王");
		System.out.println("小王"+as.yue("小王"));
		System.out.println("马云"+as.yue("马云"));
		//测试创建用户
		ATM atm=new ATM();
		atm.setUsername("小李");
		atm.setPassword("123456");
		atm.setBalance(10000);
		as.createUser(atm);
		System.out.println("小李"+as.yue("小李"));
		//删除用户
		as.delateUser("小李");
	}
}

猜你喜欢

转载自blog.csdn.net/qq_36055407/article/details/81776764