首页 > 技术文章 > jdbc的封装

hph1728390 2019-04-12 23:02 原文

分别创建  dao包、servlet包、entity实体包、util包

在druid.properties文件中添加如下代码:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/empye
username=root
password=root

 

 

创建一个student类 实现数据库表中的方法

package com.hph.entity;

public class Student {
    private  Integer id;
    private  String uname;
    private Integer age;

    public Student(Integer id, String uname, Integer age) {
        this.id = id;
        this.uname = uname;
        this.age = age;
    }
    public Student(){

    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", uname='" + uname + '\'' +
                ", age=" + age +
                '}';
    }
}

 

在util 中创建 工具类名称叫 DButil

 

package com.hph.util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.sql.*;
import java.util.*;
public class DBUtil {
    /**
     * 使用druid.properties 文件把连接数据库的地址存放在文件中
     * 使用数据源调用druid.properties 中的数据
     * */
   private static DataSource ds;
    static {
        Properties pro=new Properties();
        try {
             pro.load(DBUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
             ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
/**获得连接*/
    public static Connection getConnection(){

        try {

            return ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    /** 增删改的通用方法
     * @paramString sql  要执行的sql
     * @paramObject[] obj    对象类型的数组  里面存放着 sql执行的占位符参数
     *
     *         Object... 可变参数
     * */
    public static boolean executeUpdate(String sql,Object... args){
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            /**连接数据库*/
            conn =DBUtil.getConnection();
            /**调用sql中的语句*/
            ps = conn.prepareStatement(sql);
                /**遍历 sql语句中的数据*/
            for (int i=0;i<args.length;i++){
                ps.setObject(i+1,args[i]);
            }
            //执行sql语句
            int i = ps.executeUpdate();
            if (i>0)return true;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //关闭
            close(conn,ps,null);
        }
        return false;
    }

    /**
     * c查询的通用方法
     * @param sql
     * @param args
     * @return
     */
    public static List<Map<String, Object>> executeQuery(String sql, Object... args){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet set = null;
        try {
            conn = DBUtil.getConnection();
            ps = conn.prepareStatement(sql);
            /* 有可能有参数 */
            for (int i=0;i<args.length;i++){
                ps.setObject(i+1,args[i]);
            }
            /*执行*/
            set = ps.executeQuery();
            /*需要将所有数据都存放到 List中    每一行 用一个 map存放*/
            List<Map<String,Object>> list = new ArrayList<>();
            /*获取本次查询结果集有多少列*/
            int count = set.getMetaData().getColumnCount();
            while(set.next()){
                Map<String, Object> map = new HashMap<>();//一行数据 用一个map 接收
                /**获取本次列的名字*/
                for(int i=0;i<count;i++){
                    String name = set.getMetaData().getColumnLabel(i+1);
                    map.put(name,set.getObject(name));
                }
                /*将每行的map存放到 List中*/
                list.add(map);
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            close(conn,ps,set);
        }
        return null;
    }

    /** 关闭的通用方法
     *
     * */
    private static void close(Connection conn,PreparedStatement st,ResultSet set){
        try {
            if(set!=null){
                set.close();
            }
            if(st!=null){
                st.close();
            }
            if(conn != null){
                conn.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

创建一个学生类的接口

package com.hph.dao;

import com.hph.entity.Student;

import java.util.List;
import java.util.Map;

public interface IStudent {
    /*** 添加一个新的学生信息
     * inset into student (name,age)value(?,?);
     * */
    boolean add(Student stu);

    /**根据id 删除信息*/
    boolean delete(int id);
    //   C 根据id修改学生
    boolean update( Student stu);
    //   D 根据id查询学生

//    E 查询所有学生
List<Map<String,Object>> getAllStudent();
}

实现接口

package com.hph.dao.impl;

import com.hph.dao.IStudent;
import com.hph.entity.Student;
import com.hph.util.DBUtil;

import java.util.List;
import java.util.Map;

public class StudentImpl  implements IStudent {
    @Override
    /**添加数据*/
    public boolean add(Student stu) {
        String sql="insert into student (sname,age)values(?,?)";
        return DBUtil.executeUpdate(sql,stu.getUname(),stu.getAge());
    }
/**删除数据*/
    @Override
    public boolean delete(int id) {
        String sql="delete from student where id=?";
        return DBUtil.executeUpdate(sql,id);
    }
/**更新数据*/
    @Override
    public boolean update(Student stu) {
        String sql="update student set sname=?,age=? where id=?";
        return DBUtil.executeUpdate(sql,stu.getUname(),stu.getAge(),stu.getId());
    }
/**查询数据*/
    @Override
    public List<Map<String, Object>> getAllStudent() {
        String sql="select * from student";
        return DBUtil.executeQuery(sql);
    }

}

 

推荐阅读