記一下流水帳

好像寫一些總結性的東西,可是真得貌似沒有什麼可寫的,不過爲了培養一種習慣,就算是記流水帳也要寫一下,否則一直都不動筆,一直拖,可能之後都不會寫了。java

今天的早上把我作的一個學生管理系統從mysql上面遷移到Oracle上,原本在學校一直都是使用mysql的,沒有用過其餘的數據庫,可是如今公司要使用Oracle,因此花費了好大力氣,安裝了Oracle10g,老實說,oracle跟mysql在很大程度上是差很少的,都是sql語句,可是也有不一樣,好比說那句坑爹的分頁查詢,之前在mysql中是要limit就能夠了,可是在oracle中就不的不使用子查詢,嵌套了一個select,可是說的也奇怪,oracle的分頁語句查詢是必需要把須要查找的記錄前面的記錄都找出來纔可以截取本身想要的那部分,這樣的話,若是是有好多條數據的話,速度不就很慢了嗎?我實在是搞不懂,誰能跟我說一下通常的解決方法,仍是有另外的其餘方法能夠查找到本身想要的數據?mysql

子查詢代碼:sql

select t2.* from (select rownum r,t1.* from student t1 where rownum<=5) t2 where t2.r>10;數據庫


下午的時候,重構了一下分頁方法的代碼,很裝B的使用了一下java的反射,但願能夠徹底的把後面的數據庫操做方法徹底獨立出來,之後能夠重複使用,原本還很差意思貼出來的,寫到這裏仍是貼出來,請你們給點意見:oracle

public class DaoImpl implements Dao {

     DB db = new DB();

     private Connection conn ;

     private boolean flag = false ;

     public DaoImpl(){

         conn = this.db.getConnection();

     }

    /**

  * 分頁

  * @param sql 分頁語句

 * @param sqlForCount 統計記錄數語句

  * @param currentPage 當前頁

  * @param pageSize 每頁多少條數據

  * @param clazz 操做POJO實體的class

  * @param beanValueClazz 信息設值對象(自定義類),入口方法名必須是:getBean(ResultSet rs,Class clazz)

  * @param request request對象

  * @return  分頁數據

  */

 @SuppressWarnings("unchecked")

 public <T extends Object> List findList(String sqlForList,String sqlForCount, int currentPage, 

     int pageSize,Class clazz,Class<T> beanValueClazz,HttpServletRequest request) {

     List list = new ArrayList();

     int totalPage=0,totalCount=0;

 try {

     Statement stmtForCount = this.conn.createStatement();

     ResultSet rsForCount = stmtForCount.executeQuery(sqlForCount);

     if(rsForCount.next()){

      //總記錄數

         totalCount =Integer.parseInt(rsForCount.getString(1));

     } 

     rsForCount.close();

     stmtForCount.close();

     //總頁數

     totalPage = (totalCount+pageSize-1)/pageSize; 

     Statement stmt = this.conn.createStatement();

     ResultSet rs = stmt.executeQuery(sqlForList);

 while(rs.next()){

     Class c = Class.forName(beanValueClazz.getName());

     Method method = c.getDeclaredMethod("getBean",ResultSet.class,Class.class);

     Object[] args = {rs,clazz};

     list.add(method.invoke(c.newInstance(),args));

 }

     rs.close();

     stmt.close();

     this.conn.close();

 } catch (Exception e) {

     e.printStackTrace();

 } 

 request.setAttribute("currentPage", currentPage);

     request.setAttribute("totalCount", totalCount);

     request.setAttribute("totalPage", totalPage);

     request.setAttribute("pageSize", pageSize);

 return list;

 }

}

 beanValue.java的入口方法:

public Object getBean(ResultSet rs,Class clazz){

     Object obj = null;

 if(clazz==Student.class){

     obj = getStudent(rs);

 }

 return obj;

 }

 

 public Student getStudent(ResultSet rs){

     Student student = new Student();

 try{

     student.setSNo(rs.getString("SNo"));

     student.setSName(rs.getString("SName"));

     student.setSSex(rs.getString("SSex"));

     student.setSNation(rs.getString("SNation"));

 }catch(SQLException e){

     e.printStackTrace();

 }

 return student;

 }

servlet中的調用語句:

findList(sql,sqlForCount,currentPage,pageSize,Student.class,beanValue.class,request);
相關文章
相關標籤/搜索