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 lists = new ArrayList();
while (rs.next()) {
Map rowData = new HashMap();
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
Map rowData = (Map) 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)