JDBC实现分页查询,同时使用动态数据源

来源:互联网 发布:移动网络改成电信 编辑:程序博客网 时间:2024/05/17 03:16
方法是通过jdbc来实现分页的,这样做的目的是可以实现多数据库的情况下,都能使用的方法。 
但是这个方法貌似会存在性能问题,因为结果集会全部数据查询出来... 

Java代码  收藏代码
  1. public JSONObject query(JSONObject object, int pageIndex, int pageSize) {  
  2.     JSONObject result = new JSONObject();  
  3.     if(object == null || object.getBoolean("success") == false) {  
  4.         result.put("success"false);  
  5.         if(object == null) {  
  6.             result.put("msg""没有成功获取到基本对象");  
  7.         } else if(object.getString("msg") != null) {  
  8.             result.put("msg", object.getString("msg"));  
  9.         }  
  10.     } else {  
  11.         Connection connection = null;  
  12.         PreparedStatement preparedStatement = null;  
  13.         //Statement statement = null;  
  14.         ResultSet rs = null;  
  15.         try {  
  16.             connection = createConnection(object.getString("className"), object.getString("url"), object.getString("user"), object.getString("pwd"));  
  17.             String sql = object.getString("sql");  
  18.             System.out.println(sql);  
  19.             preparedStatement = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);  
  20.             if(pageIndex == 1 && pageSize == 1) {  
  21.                 rs = preparedStatement.executeQuery();  
  22.             } else {  
  23.                 preparedStatement.setMaxRows(((pageIndex - 1) * pageSize) + pageSize);//查询的最大行数  
  24.                 //preparedStatement.setMaxRows(pageSize);  
  25.                 rs = preparedStatement.executeQuery();  
  26.                 //rs.first();  
  27.                 rs.absolute((pageIndex - 1) * pageSize + 1);//利用绝对定位定位到结果集的每页第二条数据  
  28.                 rs.relative(-1);//利用结果集的相对定位定位到每页的第一条数据  
  29.             }  
  30.             JSONArray datas = new JSONArray();  
  31.             JSONArray data = null;  
  32.             ResultSetMetaData metaData = null;  
  33.             int colnumCount = 0;  
  34.             String colnumName = null;  
  35.             Object tmp = null;  
  36.             SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  37.             Reader reader = null;  
  38.             BufferedReader bufferedReader = null;  
  39.             char[] chbTmp = null;  
  40.             StringBuffer sb = new StringBuffer();  
  41.             while(rs.next()) {  
  42.                 //获取数据  
  43.                 data = new JSONArray();  
  44.                 metaData = rs.getMetaData();  
  45.                 colnumCount = metaData.getColumnCount() + 1;  
  46.                 for (int i = 1; i < colnumCount; i++) {  
  47.                     colnumName = metaData.getColumnName(i);  
  48.                     tmp = rs.getObject(colnumName);  
  49.                     if(tmp == null) {  
  50.                         data.add("");  
  51.                     } else {  
  52.                         if(tmp.getClass() == Timestamp.class) {  
  53.                             data.add(dateFormat.format(tmp));  
  54.                         } else if(tmp.getClass() == CLOB.class) {  
  55.                             chbTmp = new char[20];  
  56.                             reader = rs.getClob(colnumName).getCharacterStream();  
  57.                             bufferedReader = new BufferedReader(reader);  
  58.                             bufferedReader.read(chbTmp);  
  59.                             sb.delete(0, chbTmp.length);  
  60.                             sb.append(chbTmp);  
  61.                             data.add(sb.toString() + "...");  
  62.                         } else {  
  63.                             data.add(tmp);  
  64.                         }  
  65.                     }  
  66.                 }  
  67.                 datas.add(data);;  
  68.             }  
  69.             JSONArray colnums = new JSONArray();  
  70.             if(datas.size() > 0) {  
  71.                 //获取列名  
  72.                 metaData = rs.getMetaData();  
  73.                 colnumCount = metaData.getColumnCount() + 1;  
  74.                 for (int i = 1; i < colnumCount; i++) {  
  75.                     colnumName = metaData.getColumnName(i);  
  76.                     colnums.add(colnumName);  
  77.                 }  
  78.             } else {  
  79.                 colnums.add("没有成功获取列的信息");  
  80.             }  
  81.             result.put("colnum", colnums);  
  82.             result.put("datas", datas);  
  83.             result.put("success"true);  
  84.         } catch (ClassNotFoundException e) {  
  85.             e.printStackTrace();  
  86.             result.put("success"false);  
  87.             result.put("msg", e.getMessage());  
  88.         } catch (SQLException e) {  
  89.             e.printStackTrace();  
  90.             result.put("success"false);  
  91.             result.put("msg", e.getMessage());  
  92.         } catch (IOException e) {  
  93.             e.printStackTrace();  
  94.             result.put("success"false);  
  95.             result.put("msg", e.getMessage());  
  96.         } finally {  
  97.             close(connection, preparedStatement, rs);  
  98.         }  
  99.     }  
  100.     return result;  
  101. }