jdbc-2

6 篇文章 1 订阅
4 篇文章 0 订阅


前言

在上一个博客中我已经介绍并实施了jdbc的创建以及基本的数据库操作,那么在这里我将从几个方面再加以介绍。


提示:以下是本篇文章正文内容,下面案例可供参考

一、jdbc的工具类的创建

在每次编写代码是都会经常使用繁琐的jdbc创建连接以及创建通道之类的事情,那么我们将这样的一些繁琐的事情创建为一个工具类,在我们要使用时直接调用方法就可以实现对数据库的相关操作。

1.创建DBUtils工具类

public class DBUtils {}

2.定义工具类需要的对象

  • 在之前的对数据库的连接可以知道会有下列的对象需要定义:
	protected Connection connection = null;//连接对象的定义
    protected PreparedStatement preparedStatement = null;//预状态通道对象
    protected ResultSet resultSet = null;//结果集对象
    protected int k = 0;//受影响的行数(后面增删改时需要利用的返回值)
    private String url="jdbc:mysql://localhost:3306/wode?serverTimezone=UTC";
    private String pass="123";
    private String userName="root"; 

3.加载驱动

  • 因为这里所有的方法都是封装到方法里面的,用静态,能够让所有的都能进行访问
 static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

4.获得连接

  • 这里我使用的是普通连接(下面是常用的德鲁伊连接池连接)
 protected Connection getConnection(){
        try {
            connection = DriverManager.getConnection(url, userName, pass);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return connection;
    }
  • 德鲁伊连接池连接
   protected Connection getConnection() {
        try {
            //德鲁伊连接池
            connection = dataSource.getConnection();
//            connection = DriverManager.getConnection(url, userName, pass);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return connection;
    }

5.创建通道

  • 传入SQL创建通道
protected PreparedStatement getPreparedStatement(String sql) {
        try {
            getConnection();
            preparedStatement = connection.prepareStatement(sql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return preparedStatement;
    }

6.给占位符赋值 list中保存的 是给占位符所赋的值

  • 在传入SQL语句是利用占位符(?)来占位,并存储到list集合中
   private void serParams(List list) {
        try {
            if (list != null && list.size() > 0) {
                for (int i = 0; i < list.size(); i++) {
                    preparedStatement.setObject(i + 1, list.get(i));
                }
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

7.增删改调取的方法

  • 与上一个jdbc介绍差不多的方法(但是需要注意在后面传入返回时的差距)
 protected int update(String sql, List params) {
        try {
            getPreparedStatement(sql);
            serParams(params);
            k = preparedStatement.executeUpdate();
            return k;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return k;
    }

8.查询的时候调取一个方法

protected ResultSet query(String sql, List list) {
        try {
            getPreparedStatement(sql);
            serParams(list);
            resultSet = preparedStatement.executeQuery();
            return resultSet;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

9.关闭资源

 protected void closeAll() {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (connection != null) {
                connection.close();
            }
            if (preparedStatement != null) {
                preparedStatement.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

二、实际项目操作

  • 下面是对上面工具类的项目运用(飞机票)

1.创建实体类在bean包里

  • 比较简单直接看下面
public class Airinfo {
    private String airId;
    private String airAdress;
    private Date airTime;

    public String getAirId() {
        return airId;
    }

    public void setAirId(String airId) {
        this.airId = airId;
    }

    public String getAirAdress() {
        return airAdress;
    }

    public void setAirAdress(String airAdress) {
        this.airAdress = airAdress;
    }

    public Date getAirTime() {
        return airTime;
    }

    public void setAirTime(Date airTime) {
        this.airTime = airTime;
    }
}

2.创建接口并实现接口

  • AirinfoDao接口
public interface AirinfoDao {
    //1.定义查询所有航班
    public List<Airinfo> airAll();
    //2.按日期查询航班
    public List<Airinfo> getBytime(String date);
    //3.按目的地查询航班
    public List<Airinfo> getByadress(String airadress);
    //4.更新航班信息
    public int upair(String newairid,String airadress,String date,String airid);
    //5.删除航班
    public int deleteair(String airid);
}
  • 实现接口
public class AirinfoDaoImpl extends DBUtils implements AirinfoDao {
    @Override
    public List<Airinfo> airAll() {

        String sql = "select *from airinfo";
        preparedStatement = getPreparedStatement(sql);
        try {
            resultSet = preparedStatement.executeQuery();
            List<Airinfo> air=new ArrayList();
            while (resultSet.next()) {
                Airinfo airinfo = new Airinfo();
                airinfo.setAirId(resultSet.getString("airid"));
                airinfo.setAirAdress(resultSet.getString("airadress"));
                airinfo.setAirTime(resultSet.getDate("airtime"));
                air.add(airinfo);
            }
            return air;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            closeAll();
        }
        return null;
    }

    @Override
    public List<Airinfo> getBytime(String date) {
        String sql="SELECT *FROM airinfo WHERE airtime=?";
        List list = new ArrayList();
        list.add(date);
        ResultSet res = query(sql, list);
        List<Airinfo> air=new ArrayList();
        try {
            while (res.next()){
                Airinfo airinfo = new Airinfo();
                airinfo.setAirId(res.getString("airid"));
                airinfo.setAirAdress(resultSet.getString("airadress"));
                airinfo.setAirTime(resultSet.getDate("airtime"));
                air.add(airinfo);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            closeAll();
        }
        return air;
    }

    @Override
    public List<Airinfo> getByadress(String airadress) {
        String sql="SELECT *FROM airinfo WHERE airadress=?";
        List list = new ArrayList();
        list.add(airadress);
        ResultSet res = query(sql, list);
        List<Airinfo> air=new ArrayList();
        try {
            while (res.next()){
                Airinfo airinfo = new Airinfo();
                airinfo.setAirId(res.getString("airid"));
                airinfo.setAirAdress(resultSet.getString("airadress"));
                airinfo.setAirTime(resultSet.getDate("airtime"));
                air.add(airinfo);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            closeAll();
        }
        return air;
    }

    @Override
    public int upair(String newairid,String airadress,String date,String airid) {
        String sql = "UPDATE airinfo SET airid=?,airadress=?,airtime=? WHERE airid=?";
        List list =new ArrayList();
        list.add(0,newairid);
        list.add(1,airadress);
        list.add(2,date);
        list.add(3,airid);
        int updatew = update(sql, list);
//        if (updatew>0){
//            System.out.println("执行成功");
//        }else {
//            System.out.println(updatew);
//            System.out.println("执行失败");
//        }
        closeAll();
        return updatew;
    }

    @Override
    public int deleteair(String airid) {
        String sql = "DELETE FROM airinfo WHERE airid=?";
        List list =new ArrayList();
        list.add(airid);
        int updatev = update(sql, list);
        closeAll();
        return updatev;

    }
}

3.创建测试类调用测试


总结

这是我在学完jdbc数据库之后几天之后的总结,需要记忆的东西还有很多,在自己忘了的时候回来看看,因为自己在学习的时候问题就不是很大,所以写的就比较简单。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值