關於oracle http服務與tomcat端口衝突問題

DAO設計模式 1: 爲什麼使用DAO?     a: 在涉及數據庫操作,以前一般使用jdbc,使用這種方法我們會發現代碼和html標籤同時使用,維護很困難。     b:jsp文件中不應該出現任何sql包,jsp文件側重於顯示界面的。     c:所有的數據庫操作建議使用prepareStatement。好處重在避免sql注入漏洞。 2:DAO是J2EE中的數據層操作。 3:數據庫創建腳本 --刪除表 DROP TABLE person; --創建表 CREATE TABLE person (     id varchar(20) not null primary key,     name varchar(20) not null,     password varchar(20) not null,     age varchar(20) not null,     email varchar(30) not null ); --事務提交 commit; 4:如果在數據庫修改後,我們怎麼樣才能做到前臺頁面不需要太多的改變?         我們必須規定出對PERSON中的全部操作。比如增刪查改。 按照以上要求,制定出操作那張表的標準,之後只要針對不同的數據庫實現這些標準就可以了。 在java中我們可以通過接口來實現----》DAO規定的就是這些接口。 package com.nnu.djx.dao; import com.nnu.djx.vo.*; import java.util.*; //規定了在此項目中操作person表的全部方法 public interface PersonDao {     /**      * 插入對象      * @throws Exception      */     public void insert(Person person)throws Exception;     /**      * 更新對象      * @throws Exception      */     public void update(Person person)throws Exception;     /**      * 刪除某一對象      * @param id      * @throws Exception      *       */     public void delete(String id)throws Exception;          /**      * 按照ID查詢      * @param id      * @return      * @throws Exception      *       */     public Person queryById(String id)throws Exception;     /**      * 查詢全部結果      * @return      * @throws Exception      */     public List     queryAll()throws Exception;      /**      * 模糊查詢      * @param code      * @return      * @throws Exception      */     public List queryByLike(String code)throws Exception;      } 5:在DAO中操作的是對象和數據庫之間的關係。     不過此時的對象是(VO,POLO,TO)(值對象,最簡單對象,傳輸對象)     即是隻包括getter,setter方法的類。 通過VO操作DAO Vo中的字段和表中一一對應。 package com.nnu.djx.vo; public class Person {     private String id;     private String name;     private String password;     private int age;     private String email;          //生成getter,setter方法。     public int getAge() {         return age;     }     public void setAge(int age) {         this.age = age;     }     public String getEmail() {         return email;     }     public void setEmail(String email) {         this.email = email;     }     public String getId() {         return id;     }     public void setId(String id) {         this.id = id;     }     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     public String getPassword() {         return password;     }     public void setPassword(String password) {         this.password = password;     } } 6: 對於定義好的接口,需要給出具體實現。對數據庫表的一切具體操作。 可以定義一個數據庫鏈接類,只負責連接。 package com.nnu.djx.dao.impl; import java.util.List; import com.nnu.djx.dao.*; import com.nnu.djx.vo.Person; public class PersonDaoImpl implements PersonDao  {     public void delete(String id) throws Exception {         // TODO 自動生成方法存根              }     public void insert(Person person) throws Exception {         // TODO 自動生成方法存根              }     public List queryAll() throws Exception {         // TODO 自動生成方法存根         return null;     }     public Person queryById(String id) throws Exception {         // TODO 自動生成方法存根         return null;     }     public List queryByLike(String code) throws Exception {         // TODO 自動生成方法存根         return null;     }     public void update(Person person) throws Exception {         // TODO 自動生成方法存根     }     public PersonDaoImpl() {         // TODO 自動生成構造函數存根     } } 具體的數據庫連接類如下: package com.nnu.djx.dbc; import java.sql.*; public class DataBaseConnection {          private final String DBDRIVER ="oracle.jdbc.driver.OracleDriver";     private final String DBURL ="jdbc:oracle:thin:@localhost:1521:ora9djx";     private final String DBUSER ="system";     private final String DBPWD ="system";          Connection conn = null;     PreparedStatement pstmt = null;     ResultSet rst = null;          public DataBaseConnection(){         try{             Class.forName(DBDRIVER);                          this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPWD);         }catch(Exception e){             e.printStackTrace();         }     }     //取得數據庫鏈接     public Connection getConnection(){         return this.conn;     }     public void closeConnection(){         try {             this.conn.close();         } catch (SQLException e) {             // TODO 自動生成 catch 塊             e.printStackTrace();         }     } } 然後對於上面的具體實現。用prepareStatement實現。。 5:再設計一個jsp頁面用來操作數據庫,檢驗前面的代碼是否正確。 <%@page contentType="text/html;charset=GB2312"%> <%@page import="com.nnu.djx.dao.*,com.nnu.djx.vo.*,com.nnu.djx.dao.impl.*,java.util.*,com.nnu.djx.factory.*"%> <%     //進行插入操作     /*     Person person = new Person();     person.setId("001");     person.setName("why");     person.setPassword("123");     person.setAge(12);     person.setEmail("[email protected]");          */         PersonDao persondao = new PersonDaoImpl();              //PersonDaoFactory.getPersonDaoInstance().queryAll();     //刪除一個用戶               try{              //persondao.insert(person);                  //persondao.delete("001");                  //persondao.update(person);                  //全部查詢         /*         List list = persondao.queryAll();         Iterator iterator = list.iterator();         while(iterator.hasNext())             {                 Person person = (Person)iterator.next();                 out.print(person.getName());             }                      */                  //模糊查詢         List list = persondao.queryByLike("hy");         Iterator iterator = list.iterator();         while(iterator.hasNext())             {                 Person person = (Person)iterator.next();                 out.print(person.getName());             }     }catch(Exception e){              } %> DAO使用後,我們發現前天的代碼明顯減少,而後臺比如類都增多了。 同時可以發現這樣的一個問題 PersonDao persondao = new PersonDaoImpl(); 操作時必須知道子類。 如果有一天我們改變了數據庫(DB2)修改就不方便了。 應該考慮如何是前臺代碼不關後臺的變化。。 此時可以考慮工廠模式:     新建一個類工廠類PersonDaoFactory package com.nnu.djx.factory; import com.nnu.djx.dao.PersonDao; import com.nnu.djx.dao.impl.PersonDaoImpl; public class PersonDaoFactory {          public static PersonDao getPersonDaoInstance(){         return new PersonDaoImpl();     } } 以後調用的時候就可以用 PersonDaoFactory.getPersonDaoInstance().queryAll(); 而不具體涉及到類。。。 後序: 程序經過驗證完全正確,可以作爲以後數據庫學習的模板。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章