zoukankan      html  css  js  c++  java
  • MySQL之JDBC插入、修改、删除封装集于一个方法

    1、 先建四个包

      ① com.tz.entity 实体包

      ② com.tz.dao 数据访问层包

        -> com.tz.dao.impl 实现包

      ③ com.tz.util 工具类包

      ④ com.tz.test 测试包 

    com.tz.entity 实体包

      新建 Student 实体类

     1 package com.tz.entity;
     2 
     3 
     4 public class Student{
     5     private int id;
     6     private String name;
     7     private String sex;
     8     private String pwd;
     9     private String address;
    10     public Student() {
    11     }
    12     public Student(int id, String name, String sex, String pwd, String address) {
    13         this.id = id;
    14         this.name = name;
    15         this.sex = sex;
    16         this.pwd = pwd;
    17         this.address = address;
    18     }
    19     public int getId() {
    20         return id;
    21     }
    22     public void setId(int id) {
    23         this.id = id;
    24     }
    25     public String getName() {
    26         return name;
    27     }
    28     public void setName(String name) {
    29         this.name = name;
    30     }
    31     public String getSex() {
    32         return sex;
    33     }
    34     public void setSex(String sex) {
    35         this.sex = sex;
    36     }
    37     public String getPwd() {
    38         return pwd;
    39     }
    40     public void setPwd(String pwd) {
    41         this.pwd = pwd;
    42     }
    43     public String getAddress() {
    44         return address;
    45     }
    46     public void setAddress(String address) {
    47         this.address = address;
    48     }
    //
    49 public String toString() { 50 return "Student [id=" + id + ", name=" + name + ", sex=" + sex 51 + ", pwd=" + pwd + ", address=" + address + "]"; 52 } 53 54 }

    com.tz.dao 数据访问层包

      新建StudentDao 接口

     1 package com.tz.dao;
     2 
     3 import com.tz.entity.Student;
     4 
     5 /**
     6  * 规范 方法名 
     7  * 方法有几个,要做哪些方法
     8  */
     9 public interface StudentDao {
    10     // 增加一个学生
    11     void addStudent(Student s);
    12     // 删除一个学生
    13     int deleteStudent(int id);
    14     // 修改一个学生
    15     Student updateStudent(Student s);
    16     // 查询学生
    17     Student findById(int id);
    18 }

       新建BaseDao 类

     1 package com.tz.dao;
     2 
     3 import java.sql.Connection;
     4 import java.sql.PreparedStatement;
     5 import java.sql.ResultSet;
     6 
     7 import com.tz.util.DBUtil;
     8 
     9 /**
    10  * 做所有dao的父类,封装他们基本的增删改操作,
    11  * 因为所有的Dao的增删改操作都一样。
    12  * 只是换了 不同的 sql语句和传入的参数。
    13  */
    14 public class BaseDao {
    15     private Connection conn;
    16     private PreparedStatement ps;
    17     private ResultSet rs;
    18     /**
    19      * 封装 任何增删改
    20      * sql 传入方法的Sql语句
    21      * Object[] Sql语句里面的参数,因为参数的类型不同 所以Object
    22      */
    23     public int toUpdate(String sql,Object[] obs){
    24         int a=0;
    25         try {
    26             conn=DBUtil.getConn();
    27             ps=conn.prepareStatement(sql);
    28             // 循环 赋值参数
    29             if(obs!=null&&obs.length>0){
    30                 for(int i=0;i<obs.length;i++){
    31                     ps.setObject(i+1, obs[i]);
    32                 }
    33             }
    34             a=ps.executeUpdate();
    35             return a;
    36         } catch (Exception e) {
    37             e.printStackTrace();
    38         }finally{
    39             DBUtil.closeConn(conn, ps, rs);
    40         }
    41         return a;
    42     }
    43 }

    com.tz.dao 数据访问层

        -> com.tz.dao.impl 实现包

        新建StudentDaoImpl 类

     1 package com.tz.dao.impl;
     2 
     3 import java.sql.Connection;
     4 import java.sql.PreparedStatement;
     5 import java.sql.ResultSet;
     6 import java.sql.SQLException;
     7 
     8 
     9 
    10 import com.tz.dao.BaseDao;
    11 import com.tz.dao.StudentDao;
    12 import com.tz.entity.Student;
    13 import com.tz.util.DBUtil;
    14 /**
    15  * StudentDao的实现
    16  * Java是单继承的  只能继承一个父类
    17  * 但是可以实现多个接口
    18  * 写 先继承后实现
    19  */
    20 public class StudentDaoImpl extends BaseDao  implements StudentDao{
    21     // 连接组件
    22     private Connection conn;
    23     // 得到预编译的发送Sql语句的组件
    24     private PreparedStatement ps;
    25     // 处理结果集的组件
    26     private ResultSet rs;
    27     public void addStudent(Student s) {
    28          String sql="insert into student(sid,sname,pwd,sex,address) values(?,?,?,?,?)";
    29          Object[] obs={s.getId(),s.getName(),s.getPwd(),s.getSex(),s.getAddress()};
    30          toUpdate(sql, obs);
    31     }
    32 
    33     public int deleteStudent(int id) {
    34         String sql="delete from student where sid=?";
    35         Object[] obs={id};
    36         int a=toUpdate(sql, obs);
    37         return a;
    38     }
    39 
    40     public Student updateStudent(Student s) {
    41         String sql="update student set sname=?,pwd=?,sex=?,address=? where sid=?";
    42         Object[] obs={s.getName(),s.getPwd(),s.getSex(),s.getAddress(),s.getId()};
    43         toUpdate(sql, obs);
    44         Student student=findById(s.getId());
    45         return student;
    46     }
    47 
    48     public Student findById(int id) {
    49         Student s=new Student();
    50         try {
    51             conn=DBUtil.getConn();
    52             String sql="select * from student where sid=?";
    53             ps=conn.prepareStatement(sql);
    54             ps.setObject(1, id);
    55             // 会返回一个int值 表示 你影响了 几行数据
    56             rs=ps.executeQuery();
    57             while(rs.next()){
    58                 s.setId(rs.getInt("sid"));
    59                 s.setName(rs.getString("sname"));
    60                 s.setPwd(rs.getString("pwd"));
    61                 s.setAddress(rs.getString("address"));
    62                 s.setSex(rs.getString("sex"));
    63             }
    64             return s;
    65         } catch (SQLException e) {
    66             e.printStackTrace();
    67         }finally{
    68             DBUtil.closeConn(conn, ps, rs);
    69         }
    70         return s;
    71     }
    72 
    73 }

     com.tz.util 工具类包

      新建 db.properties 配置文件

    1 #Mysql JDBC的连接配置
    2 driver=com.mysql.jdbc.Driver
    3 url=jdbc:mysql://localhost:3306/tz
    4 username=root
    5 pwd=root123

      新建 DBUtil.java 类

     1 package com.tz.util;
     2 
     3 import java.io.InputStream;
     4 import java.sql.Connection;
     5 import java.sql.DriverManager;
     6 import java.sql.PreparedStatement;
     7 import java.sql.ResultSet;
     8 import java.sql.SQLException;
     9 import java.util.Properties;
    10 
    11 
    12 /**
    13  * DBUtil负责得到数据库的连接
    14  * 做成一个工具类(如果是工具类 一般不会实例化new)
    15  * 工具方法 一般会做成静态方法
    16  */
    17 public class DBUtil {
    18     private static String driver;
    19     private static String url;
    20     private static String username;
    21     private static String pwd;
    22     // static可以写静态的代码块
    23     static{
    24         // 实例化 属性集
    25         Properties p=new Properties();
    26         // 从本类的字节码文件中根据路径得到一个输入流
    27         InputStream is=DBUtil.class.getClassLoader()
    28                 .getResourceAsStream("com/tz/util/db.properties");
    29         try {
    30             // 属性集 去加载输入流
    31             p.load(is);
    32             driver=p.getProperty("driver");
    33             url=p.getProperty("url");
    34             username=p.getProperty("username");
    35             pwd=p.getProperty("pwd");
    36             // 记载驱动
    37             Class.forName(driver);
    38         } catch (Exception e) {
    39             e.printStackTrace();
    40         }
    41     }
    42     
    43     // 封装一个得到 Connection的方法
    44     public static Connection getConn() throws SQLException{
    45         return DriverManager.getConnection(url, username, pwd);
    46     }
    47     // 封装一个关闭连接的方法
    48     public static void closeConn(Connection conn,PreparedStatement ps,ResultSet rs){
    49         if(conn!=null){
    50             try {
    51                 conn.close();
    52             } catch (SQLException e) {
    53                 e.printStackTrace();
    54             }
    55         }
    56         if(ps!=null){
    57             try {
    58                 ps.close();
    59             } catch (SQLException e) {
    60                 e.printStackTrace();
    61             }
    62         }
    63         if(rs!=null){
    64             try {
    65                 rs.close();
    66             } catch (SQLException e) {
    67                 e.printStackTrace();
    68             }
    69         }
    70     }
    71 }

    com.tz.test 测试包

     1 package com.tz.test;
     2 
     3 import org.junit.Test;
     4 
     5 import com.tz.dao.StudentDao;
     6 import com.tz.dao.impl.StudentDaoImpl;
     7 import com.tz.entity.Student;
     8 
     9 public class TestStudentDao {
    10     @Test
    11     public void testadd(){
    12         // 向上造型 
    13         StudentDao dao=new StudentDaoImpl();
    14         Student s=new Student(1010,"刘能","男","123","铁岭象牙山");
    15         dao.addStudent(s);
    16     }
    17     @Test
    18     public void testdelete(){
    19         StudentDao dao=new StudentDaoImpl();
    20         int a=dao.deleteStudent(1010);
    21         System.out.println(a);
    22     }
    23     @Test
    24     public void testupdate(){
    25         StudentDao dao=new StudentDaoImpl();
    26         Student s=new Student(1010,"刘德华","男","123","中国香港");
    27         Student st=dao.updateStudent(s);
    28         System.out.println(st);
    29     }
    30     @Test
    31     public void testfindByid(){
    32         StudentDao dao=new StudentDaoImpl();
    33         Student st=dao.findById(1010);
    34         System.out.println(st);
    35     }
    36     
    37     
    38 }
  • 相关阅读:
    整理Eclipse常用快捷键
    前端网站资源推荐
    Node.js 官方示例中的 ECMAScript 2015
    D3.js 入门系列 — 选择元素和绑定数据
    D3.js 入门系列
    PlaceHolder的两种实现方式
    Vue.js 是什么
    Webstorm官方最新版本for Mac版本 不用注册码/破坏原文件
    vue.js 学习 仅自己加强记忆
    jQuery 动画animate,显示隐藏,淡入淡出,下拉切换,过渡效果
  • 原文地址:https://www.cnblogs.com/liangwh520/p/8359873.html
Copyright © 2011-2022 走看看