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)

  • 相关阅读:
    C++的内存管理
    PostgreSQL学习手册(函数和操作符<一>)
    C++位操作
    C++的预处理
    PostGIS之路——几何对象编辑(二)
    C++运算符重载
    PostgreSQL学习手册(函数和操作符<二>)
    PostGIS之路——几何对象处理函数(一)
    postgresql命令
    不要迷失在技术的海洋中
  • 原文地址:https://www.cnblogs.com/zt528/p/5291825.html
Copyright © 2011-2022 走看看