package com.dmm.meta.service.utils; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.DataSource; import com.alibaba.fastjson.JSON; import oracle.jdbc.pool.OracleDataSource; public class QueryDataUtil { private static int page; private static int rows; private static int totalRow; public static DataSource getDataSource() throws Exception { OracleDataSource ds = new OracleDataSource(); ds.setURL("jdbc:oracle:thin:@localhost:1521:orcl"); ds.setUser("test"); ds.setPassword("test"); return ds; } public static void main(String[] args) { try { page = 1; rows = 1; totalRow = 100; page(); queryAll(); } catch (Exception e) { e.printStackTrace(); } } public static void queryAll() throws Exception { Statement sta = null; ResultSet rs = null; DataSource dSource = getDataSource(); /* Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/easyui", "root", "root");*/ try { sta = dSource.getConnection().createStatement(); rs = sta.executeQuery("SELECT * FROM ( " + "SELECT A.*, ROWNUM RN FROM (SELECT * FROM table_name) A " + "WHERE ROWNUM <= "+rows+" ) WHERE RN >= "+page+""); ResultSetMetaData md = rs.getMetaData(); // 获得结果集结构信息,元数据 int columnCount = md.getColumnCount(); // 获得列数 List<Object> lists = new ArrayList<Object>(); while (rs.next()) { Map<String, Object> rowData = new HashMap<String, Object>(); for (int i = 1; i <= columnCount; i++) { rowData.put(md.getColumnName(i), rs.getObject(i)); } lists.add(rowData); } String jsonLists = JSON.toJSONString(lists); String returnText ="{"pageRow":{"rows":"+jsonLists+","total":2},"meta":{"msg":'',"status":1,"success":"true"}}"; /*for(int i = 0;i<lists.size();i++){ Map<String, Object> rowData = (Map<String, Object>) lists.get(i); System.out.println("===================="); for (String key : rowData.keySet()) { System.out.println("key= " + key + " and value= " + rowData.get(key)); } System.out.println("++++++++++++++++++"); }*/ } catch (SQLException e) { e.printStackTrace(); } } /** * * @param page 第几页 * @param rows 显示数 * @param totalRow 总数 * @return */ private static void page(){ int totalPage = (int) (totalRow / rows);//总分页数 if (totalRow % rows != 0) { totalPage++; } if(page > 1){ page = (page*rows)+1; rows = rows*page; } if (page > totalPage){ page = totalPage; rows = rows*page; } } }
ResultSet简介:
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法(这些get方法可以访问当前行中的不同列) 提供了对这些行中数据的访问。
ResultSet.next方法用于移动到ResultSet中的下一行,使下一行成为当前行。 上面的rs.getObject(i) 即是获得这一行的数据值
ResultSetMetaData简介:
利用ResultSet的getMetaData的方法可以获得ResultSetMeta对象,而ResultSetMetaData存储了ResultSet的MetaData。
所谓的MetaData在英文中的解释为"Data about Data",直译成中文则为"有关数据的数据"或者"描述数据的数据", 实际上就是描述及解释含义的数据。
以Result的MetaData为例,ResultSet是以表格的形式存在,所以getMetaData 就包括了数据的 字段名称、类型以及数目等表格所必须具备的信息。
在ResultSetMetaData类中主要有一下几个方法。
ResultSetMetaData rsmd=rs.getMetaData();
1、getColumCount()方法 返回所有字段的数目
2、getColumName()方法 根据字段的索引值取得字段的名称。
3、getColumType()方法 根据字段的索引值取得字段的类型
executeQuery: 针对的是查询语句(select)
execute :针对的是创建语句(create,drop)