国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - 通過代理類實現java連接數據庫(使用dao層操作數據)實例分享

通過代理類實現java連接數據庫(使用dao層操作數據)實例分享

2019-10-26 16:32java教程網 JAVA教程

java通過代理類實現數據庫DAO操作代碼分享,大家參考使用吧

首先,我們在一個java文件中定義要存儲的結構類型:

 

復制代碼代碼如下:

import java.util.Date ;
/**
 *
 * @author Nero
 */
public class Emp {
    private int empno ;
    private String ename ;
    private String job ;
    private Date hiredate ;
    private float sal ;
    public void setEmpno(int empno){
        this.empno = empno ;
    }
    public void setEname(String ename){
        this.ename = ename ;
    }
    public void setJob(String job){
        this.job = job ;
    }
    public void setHiredate(Date hiredate){
        this.hiredate = hiredate ;
    }
    public void setSal(float sal){
        this.sal = sal ;
    }
    public int getEmpno(){
        return this.empno ;
    }
    public String getEname(){
        return this.ename ;
    }
    public String getJob(){
        return this.job ;
    }
    public Date getHiredate(){
        return this.hiredate ;
    }
    public float getSal(){
        return this.sal ;
    }
}

 

下面我們定義一個數據庫連接類,負責向數據庫發起連接。java連接數據庫需要驅動包,我們可以自行下載,測試的時候我使用的是mysql-connector-java-5.0.5-bin.jar。在運行程序的時候Eclipse會提示需要加載的數據庫驅動包,一些是類似于"org.gjt.mm.mysql.Driver" 之類的標準包,一般來說我們選擇工作目錄里的驅動包就可以了。

 

復制代碼代碼如下:

import java.sql.Connection ;
import java.sql.DriverManager ;
/**
 *
 * @author Nero
 */
public class DatabaseConnection {
    private static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; 
    private static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
    private static final String DBUSER = "root" ;
    private static final String DBPASSWORD = "root" ;
    private Connection conn ;
    public DatabaseConnection() throws Exception {
        Class.forName(DBDRIVER) ;
        this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
    }
    public Connection getConnection(){
        return this.conn ;
    }
    public void close() throws Exception {
        if(this.conn != null){
            try{
                this.conn.close() ;
            }catch(Exception e){
                throw e ;
            }
        }
    }
}

 

接下來我們定義一個接口,這個接口能夠幫助我們輕松地實現代理方法。接口內的方法只有三個:插入、查找全部和通過ID查找。

 

復制代碼代碼如下:


import java.util.* ;

 

/**
 *
 * @author Nero
 */
public interface IEmpDAO {
    public boolean doCreate(Emp emp) throws Exception ;
    public List<Emp> findAll(String keyWord) throws Exception ;
    public Emp findById(int empno) throws Exception ;
}

 

然后呢,我們繼承這個接口,實現具體數據庫的操作類,都是一些很基本的數據庫操作,沒啥好說的。主要要注意的是構造函數那里,參數使用Connection對象,后面使用這個類的時候要傳入前面定義的數據庫連接類DatabaseConnection中的函數getConnection()返回的Connection對象。

 

復制代碼代碼如下:

import java.sql.* ;
/**
 *
 * @author Nero
 */
public class EmpDAOImpl implements IEmpDAO{
    private Connection conn = null ;
    private PreparedStatement pstmt = null ;
    public EmpDAOImpl(Connection conn)
    {
        this.conn = conn;
    }
    public boolean doCreate(Emp emp) throws Exception{
        boolean flag = false;
        String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) VALUES(?,?,?,?,?)";
        this.pstmt = this.conn.prepareStatement(sql);
        this.pstmt.setInt(1, emp.getEmpno());
        this.pstmt.setString(2,emp.getEname()) ;
    this.pstmt.setString(3,emp.getJob()) ;
    this.pstmt.setDate(4,new java.sql.Date(emp.getHiredate().getTime())) ;
    this.pstmt.setFloat(5,emp.getSal()) ;
        if(this.pstmt.executeUpdate() > 0)
        {
            flag = true;
        }
        this.pstmt.close();
        return flag;
    }
    public List<Emp> findAll(String keyWord) throws Exception{
        List<Emp> all = new ArrayList<Emp>();
        String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE ename LIKE ? OR job LIKE ?";
        this.pstmt = this.conn.prepareStatement(sql);
        this.pstmt.setString(1,"%"+keyWord+"%"); //轉義字符
        this.pstmt.setString(2,"%"+keyWord+"%");
        ResultSet rs = this.pstmt.executeQuery(sql);
        Emp emp = null;
        while(rs.next())
        {
            emp = new Emp();
            emp.setEmpno(rs.getInt(1));
            emp.setEname(rs.getString(2)) ;
        emp.setJob(rs.getString(3)) ;
        emp.setHiredate(rs.getDate(4)) ;
        emp.setSal(rs.getFloat(5)) ;
            all.add(emp);
        }
        this.pstmt.close();
        return all;
    }
    public Emp findById(int empno) throws Exception{
        Emp emp = null ;
        String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?" ;
        this.pstmt = this.conn.prepareStatement(sql) ;
        this.pstmt.setInt(1,empno) ;
        ResultSet rs = this.pstmt.executeQuery() ;
        if(rs.next()){
            emp = new Emp() ;
            emp.setEmpno(rs.getInt(1)) ;
            emp.setEname(rs.getString(2)) ;
            emp.setJob(rs.getString(3)) ;
            emp.setHiredate(rs.getDate(4)) ;
            emp.setSal(rs.getFloat(5)) ;
        }
        this.pstmt.close() ;
        return emp ;
    }    
}

 

下面我們看看代理類的實現,個人覺得到這里就比較有意思了。在這個類里面,聲明了一個數據庫連接類DatabaseConnection的對象,一個數據庫應用類EmpDAOImpl對象,用DatabaseConnection對象初始化EmpDAOImpl對象,然后在代理類的每個函數中都使用EmpDAOImpl對象去調用從同一接口繼承而來的方法,這樣即對具體實現方法進行了一定程度的隱藏。

 

復制代碼代碼如下:

import java.sql.* ;
/**
 *
 * @author Nero
 */
public class EmpDAOProxy implements IEmpDAO{
    private DatabaseConnection dbc = null ;
    private EmpDAOImpl dao = null ;
    public EmpDAOProxy() throws Exception{
        this.dbc = new DatabaseConnection();
        this.dao = new EmpDAOImpl(this.dbc.getConnection());
    }
    public boolean doCreate(Emp emp) throws Exception{
        boolean flag = false;
        try{
            if(this.dao.findById(emp.getEmpno()) == null)
            {
                flag = this.dao.doCreate(emp);

            }
        }catch(Exception e)
        {
            throw e;
        }finally{
            this.dbc.close();
        }
        return flag;
    }
    public List<Emp> findAll(String keyWord) throws Exception{
        List<Emp> all = null ;
        try{
            all = this.dao.findAll(keyWord) ;
        }catch(Exception e){
            throw e ;
        }finally{
            this.dbc.close() ;
        }
        return all ;
    }
    public Emp findById(int empno) throws Exception{
        Emp emp = null ;
        try{
            emp = this.dao.findById(empno) ;
        }catch(Exception e){
            throw e ;
        }finally{
            this.dbc.close() ;
        }
        return emp ;
    }
}

 

這還不是全部,我們可以再加一個工廠類來實現工廠模式:

 

復制代碼代碼如下:

/**
 *
 * @author Nero
 */
public class DAOFactory {
    public static IEmpDAO getIEmpDAOInstance() throws Exception{
        return new EmpDAOProxy() ;
    }
}

 

這個工廠類有什么用呢?最后我們在主類文件中進行調用,可以看看工廠類有什么作用:

 

復制代碼代碼如下:

/**
 *
 * @author Nero
 */
public class TestDAOInsert {
    public static void main(String args[]) throws Exception{
        Emp emp = null ;
        for(int x=0;x<5;x++){
            emp = new Emp() ;
            emp.setEmpno(1000 + x) ;
            emp.setEname("中文顯示測試 - " + x) ;
            emp.setJob("程序員 - " + x) ;
            emp.setHiredate(new java.util.Date()) ;
            emp.setSal(500 * x) ;
            DAOFactory.getIEmpDAOInstance().doCreate(emp) ;
        }
    }
}

 

可見具體的實現方法隱藏得比較好,通過工廠類調用get方法獲取代理類,代理類調用特定方法,然后由代理類內的具體操作對象去調用具體的操作方法。

其實這些東西看起來會覺得很簡單,但是自己設計的時候往往會忘記。主要是因為用得不多吧,一開始總是要強迫自己想起來去做,然后慢慢地才能變成一種習慣。

延伸 · 閱讀

精彩推薦
  • JAVA教程idea遠程調試spark的步驟講解

    idea遠程調試spark的步驟講解

    今天小編就為大家分享一篇關于idea遠程調試spark的步驟講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來...

    雙斜杠少年4702019-06-23
  • JAVA教程Scala之文件讀取、寫入、控制臺操作的方法示例

    Scala之文件讀取、寫入、控制臺操作的方法示例

    這篇文章主要介紹了Scala之文件讀取、寫入、控制臺操作的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    robwang1513752019-07-07
  • JAVA教程Java線程優先級示例代碼

    Java線程優先級示例代碼

    使用過Bit下載軟件的同學應該很清楚,我們有多個下載任務同時執行,而其中的某一個或多個是非常重要的,于是給這些任務設定一個高度優先,以便任務...

    Java教程網2292019-10-13
  • JAVA教程java階乘計算獲得結果末尾0的個數代碼實現

    java階乘計算獲得結果末尾0的個數代碼實現

    今天偶然看到一個要求,求1000~10000之間的數n的階乘并計算所得的數n!末尾有多少個0?要求: 不計算 只要得到末尾有多少個0就可以了,看下面的代碼吧 ...

    java代碼網4412019-10-23
  • JAVA教程Java 添加Word目錄的2種方法示例代碼詳解

    Java 添加Word目錄的2種方法示例代碼詳解

    目錄是一種能夠快速、有效地幫助讀者了解文檔或書籍主要內容的方式。這篇文章主要介紹了Java 添加Word目錄的2種方法 ,需要的朋友可以參考下...

    E-iceblue2772019-07-04
  • JAVA教程Struts2源碼分析之ParametersInterceptor攔截器

    Struts2源碼分析之ParametersInterceptor攔截器

    這篇文章主要介紹了Struts2源碼分析之ParametersInterceptor攔截器,ParametersInterceptor攔截器其主要功能是把ActionContext中的請求參數設置到ValueStack中,,需要的朋友...

    chen_hao1672019-07-04
  • JAVA教程log4j的使用詳細解析

    log4j的使用詳細解析

    最近在整理公司產品的日志輸出規范,涉及log4j的使用介紹,就簡單整理了一下。需要的朋友可以過來參考參考 ...

    java之家4152019-10-11
  • JAVA教程Java parseInt解釋加方法示例

    Java parseInt解釋加方法示例

    使用此方法得到的原始數據類型的一個特定的字符串。 parseXxx()是一個靜態方法,可以有一個參數或兩個 ...

    java教程網4652019-10-18
456
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: av网址aaa| 亚色网站| 亚洲国产精品久久人人爱 | 国产精品毛片一区二区三区 | 99免费视频 | 久久中文字幕网 | 龙珠z国语291集普通话 | 欧美综合视频 | 亚洲91| 99re国产精品视频 | 国产成人精品综合 | 国产精品久久久久久久午夜 | 成人片在线播放 | 最新日韩免费 | 久久精品视 | 日本高清不卡视频 | 青青青国产精品一区二区 | 精品久久久久久久人人人人传媒 | 欧美日韩国产一区二区三区不卡 | 午夜资源 | 美女高潮久久久 | 午夜国产| 亚洲一区av | 欧美中文字幕 | 国产区在线观看 | 91免费看网站 | 天天综合7799精品影视 | 国产精品免费网址 | 欧美a级成人淫片免费看 | 无码一区二区三区视频 | 欧美久久精品 | 九色在线 | 国产精品成人一区二区三区夜夜夜 | 精品三级三级三级三级三级 | 国产91精品亚洲精品日韩已满 | 国产日韩欧美一二三区 | a毛片视频网站 | 中文永久免费观看 | 电影91久久久 | 一区二区三区欧美 | 乱人伦xxxx国语对白 |