将JDBC ResultSet结果集转成List

 
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)

posted @ 2016-04-21 13:32  IAMME  阅读(1236)  评论(0编辑  收藏  举报