JDBC封裝-Java(新手)


 

 

JDBC的封裝,自己總結的自己總結的自己總結的

 


 

dao (代碼分層)命名規范:


    1、com.XXX.dao    存放dao相關的類型 例如 StudentDAOImpl 處理 數據庫的鏈接 存取數據


    2、com.XXX.servlet    存放servlet相關的類 例如:StudentServlet 處理 與瀏覽器交互的類


    3、com.XXX.entity     存放實體類 例如 Student 接受數據庫對象模型


    4、com.XXX.util         存放工具類 例如 DBUtil

 


操作步驟: 


首先,創建一個數據庫表單,起名為Studetn。內有:id、name、age、sex四個屬性。將id設為主鍵並且設置自動遞增。


 

第二,在數據庫建立完表單之后,在Java中創建一個數據庫表單的實體類。(類名和表名一致)

內有:

    1、表單的屬性值和屬性的基本數據類型。

    2、無參的構造函數。

    3、有參的構造函數。

    4、Get和Set方法。

    5、toString方法。


 

第三:創建一個工具類。

內有:

    1、寫一個靜態代碼塊。將注冊驅動寫入其中。

       原因:驅動只需要加載一次即可,

          所以寫在靜態代碼段中(static),類的靜態代碼塊,隨着類的加載,只執行一次。

    2、將建立連接進行封裝。

    3、將增刪改的通用方法也一並進行封裝。


 

第四,先在dao層創建一個接口

內有:

    1、返回值類型和方法名、參數。

    1.1、可根據增刪改分為不同的寫法。

    1.2、兩個以上的參數,全部使用對象傳參。


 

第五:在dao層下創建一個包,命名為Impl,在這個包內創建一個接口實現類。

內有:

    1、寫入SQL語句,要增刪改的內容可用占位符代替。

    2、返回在工具類里給增刪改通用方法設定的調用方法。

    3、在返回調用方法里加入占位符所代表的對象。


 

第六:在servlet里創建測試類。

內有:

    1、通過創建的實體類來賦值。

    2、通過實現類來調用接口里的方法。

    3、調用方法。


 

 

實例:

 


第一步:創建數據庫表單。

 

    

 

 


 

 第二步: 創建一個數據庫表單的實體類。

     

 1 package com.Wuchuang.entiy;
 2 
 3 public class Student {
 4 
 5     private int id;
 6     private String name;
 7     private int age;
 8     private String sex;
 9 
10 
11     public Student() {
12     }
13 
14     public Student(int id, String name, int age, String sex) {
15         this.id = id;
16         this.name = name;
17         this.age = age;
18         this.sex = sex;
19     }
20 
21     public int getId() {
22         return id;
23     }
24 
25     public void setId(int id) {
26         this.id = id;
27     }
28 
29     public String getName() {
30         return name;
31     }
32 
33     public void setName(String name) {
34         this.name = name;
35     }
36 
37     public int getAge() {
38         return age;
39     }
40 
41     public void setAge(int age) {
42         this.age = age;
43     }
44 
45     public String getSex() {
46         return sex;
47     }
48 
49     public void setSex(String sex) {
50         this.sex = sex;
51     }
52 
53     @Override
54     public String toString() {
55         return "Student{" +
56                 "id=" + id +
57                 ", name='" + name + '\'' +
58                 ", age=" + age +
59                 ", sex='" + sex + '\'' +
60                 '}';
61     }
62 }

 


第三步:創建一個工具類。

    

 1 package com.Wuchuang.util;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.SQLException;
 7 
 8 public class DBUtil {
 9     //注冊驅動,驅動只需要加載一次即可
10     //所以寫在靜態代碼段中(static)
11     //類的靜態代碼塊,隨着類的加載,只執行一次。
12     static {
13         try {
14             Class.forName("com.mysql.jdbc.Driver");
15         } catch (ClassNotFoundException e) {
16             e.printStackTrace();
17         }
18     }
19     //建立鏈接。需要單獨創建一個方法。
20     //通過返回值返回鏈接對象。
21     //鏈接每次用完之后就會關閉。
22     public static Connection getConnection() {
23         try {
24             return DriverManager.getConnection("jdbc:mysql:///test?characterEnconding=UTF-8", "數據庫賬戶", "密碼");
25         } catch (SQLException e) {
26             e.printStackTrace();
27         }
28         return null;
29     }
30 
31     /** 增刪改的通用方法
32      * @param  String sql       要執行的sql
33      * @param  Object[] obj    對象類型的數組  里面存放着 sql執行的占位符參數
34      *         Object...       可變參數
35      * */
36     public  static  boolean executeUpdate(String sql,Object... args){
37         PreparedStatement ps = null;
38 
39         try {
40             ps = getConnection().prepareStatement(sql);
41             for (int i = 0;i<args.length;i++){
42                 ps.setObject(i+1,args[i]);
43             }
44             int i = ps.executeUpdate();
45             if (i>0)return true;
46         } catch (SQLException e) {
47             e.printStackTrace();
48         }finally {

        close(conn,ps,null);
      }
49 return false; 

50 }

51 }

 

 1      // c查詢的通用方法
 2     public static List<Map<String,Object>> executeQuery(String sql,Object... args){
 3         Connection conn = null;
 4         PreparedStatement ps = null;
 5         ResultSet set = null;
 6         try {
 7             conn = DBUtil.getConnection();
 8             ps = conn.prepareStatement(sql);
 9             /* 有可能有參數 */
10             for (int i=0;i<args.length;i++){
11                 ps.setObject(i+1,args[i]);
12             }
13             /*執行*/
14             set = ps.executeQuery();
15             /*需要將所有數據都存放到 List中    每一行 用一個 map存放*/
16             List<Map<String,Object>> list = new ArrayList<>();
17             /*獲取本次查詢結果集有多少列*/
18             int count = set.getMetaData().getColumnCount();
19 
20             while(set.next()){
21                 Map<String, Object> map = new HashMap<>();//一行數據 用一個map 接收
22 
23                 for(int i=0;i<count;i++){
24                     String name = set.getMetaData().getColumnLabel(i+1);
25                     map.put(name,set.getObject(name));
26                 }
27                 /*將每行的map存放到 List中*/
28                 list.add(map);
29             }
30             return list;
31         } catch (Exception e) {
32             e.printStackTrace();
33         }finally {
34             close(conn,ps,set);
35         }
36         return null;
37     }
38 
39     / /關閉的通用方法    
40 private static void close(Connection conn,PreparedStatement st,ResultSet set){
41         try {
42             if(set!=null){
43                 set.close();
44             }
45             if(st!=null){
46                 st.close();
47             }
48             if(conn != null){
49                 conn.close();
50             }
51         }catch (Exception e){
52             e.printStackTrace();
53         }
54     }
55 }

 


第四步:在dao層創建一個接口。

 1 package com.Wuchuang.dao;
 2 
 3 import com.Wuchuang.entiy.Student;
 4 
 5 public interface IStudentDAO {
 6     /**
 7      * 添加新學生
 8      * insert  into student  (name,age,sex) values (?,?,?);
 9      * 兩個以上的參數 全用對象傳參
10      * @param  學生對象 里面存放當着需要添加的學生信息
11      * @return  boolean  成功返回 true  失敗 返回 false
12      */
13         boolean add (Student s);
14 
15 
16     /**
17      * 根據id刪除學生,所以返回值可以直接填寫id的數據類型和id
18      * delete from student where id = ?
19      */
20         boolean  delete(int  id);
21 
22 
23     /**
24      * 根據id修改學生
25      * update student set name = ?,age= ? where id = ?
26      */
27         boolean update(Student s);
28 }

 


 

第五步:創建一個接口實現類。

 1 package com.Wuchuang.dao.Impl;
 2 
 3 import com.Wuchuang.dao.IStudentDAO;
 4 import com.Wuchuang.entiy.Student;
 5 import com.Wuchuang.util.DBUtil;
 6 
 7 public class StudentDAOImpl implements IStudentDAO {
 8     @Override
 9     public boolean add(Student s) {
10         String sql = "insert into Student (name,age,sex) values (?,?,?)";
11 
12         return DBUtil.executeUpdate(sql,s.getName(),s.getAge(),s.getSex());
13     }
14 
15     @Override
16     public boolean delete(int id) {
17         String sql = "delete from Student where id = ?";
18 
19         return DBUtil.executeUpdate(sql,id);
20     }
21 
22     @Override
23     public boolean update(Student s) {
24         String sql = "update Student set name = ?,age = ?,sex = ? where id = ?";
25 
26         return DBUtil.executeUpdate(sql,s.getName(),s.getAge(),s.getSex(),s.getId());
27 
28     }
29 }

 


 

第六步:進行測試。

 1 package com.Wuchuang.servlet;
 2 
 3 import com.Wuchuang.dao.IStudentDAO;
 4 import com.Wuchuang.dao.Impl.StudentDAOImpl;
 5 import com.Wuchuang.entiy.Student;
 6 import org.junit.Test;
 7 
 8 public class ServletTest{
 9     @Test
10     public void test(){
11         Student s = new Student(1,"吃飯",38,"男");
12 
13         IStudentDAO dao =  new StudentDAOImpl();
14 
15         dao.add(s);
16     }
17 
18 }

 


2019年4月11日17:22:31 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM