记一下流水帐

好像写一些总结性的东西,可是真得貌似没有什么可写的,不过为了培养一种习惯,就算是记流水帐也要写一下,否则一直都不动笔,一直拖,可能之后都不会写了。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);
相关文章
相关标签/搜索