zoukankan      html  css  js  c++  java
  • 将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)

  • 相关阅读:
    现代软件工程 第一章 概论 第3题——韩婧
    现代软件工程 第一章 概论 第2题——韩婧
    小组成员邓琨、白文俊、张星星、韩婧
    UVa 10892 LCM的个数 (GCD和LCM 质因数分解)
    UVa 10780 幂和阶乘 求n!中某个因子的个数
    UVa 11859 除法游戏(Nim游戏,质因子)
    Codeforces 703C Chris and Road 二分、思考
    Codeforces 703D Mishka and Interesting sum 树状数组
    hdu 5795 A Simple Nim SG函数(多校)
    hdu 5793 A Boring Question 推公式(多校)
  • 原文地址:https://www.cnblogs.com/zt528/p/5291825.html
Copyright © 2011-2022 走看看