当前位置:Gxlcms > 数据库问题 > Java针对数据库增删改查代码

Java针对数据库增删改查代码

时间:2021-07-01 10:21:17 帮助过:16人阅读

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针对数据库增删改查代码

标签:toc   try   元数据   boolean   query   返回   保存   rollback   pac   

人气教程排行