最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何將ResultSet結(jié)果集遍歷到List中

 更新時(shí)間:2023年02月28日 09:40:51   作者:gblfy  
這篇文章主要介紹了Java如何將ResultSet結(jié)果集遍歷到List中問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

如何將ResultSet結(jié)果集遍歷到List中

今天在使用jstl標(biāo)簽展示查詢結(jié)果時(shí)遇到一個(gè)小問(wèn)題,即如何將ResultSet對(duì)象傳遞給前臺(tái)頁(yè)面。

在默認(rèn)情況中我們?cè)谑褂脭?shù)據(jù)庫(kù)查詢時(shí)

public List selectDataFromJdbc() throws SQLException, ClassNotFoundException {

? ? ? ? Class.forName("oracle.jdbc.driver.OracleDriver"); //加載MYSQL JDBC驅(qū)動(dòng)程序
? ? ? ? String url = "jdbc:oracle:thin:@192.168.x.222:1521:orcl";
? ? ? ? Connection conn = DriverManager.getConnection(url, "username", "passwd");
? ? ? ? Statement stat = conn.createStatement();
? ? ? ? String sql = "select u.user_id ,u.account,u.name from " + "sys_user u";
? ? ? ? ?// 格式: String sql = "select * from " + TableName where 1=1;
? ? ? ? ResultSet rs = stat.executeQuery(sql);
? ? ? ? List list = convertList(rs);
? ? ? ? stat.close();
? ? ? ? conn.close();
? ? ? ? return list;
? ? }

在正常情況下,我們是不能直接將 ResultSet 記錄集 rs 直接傳遞給前臺(tái)的,因?yàn)?ResultSet 不僅無(wú)法進(jìn)行循環(huán)遍歷 (即只能每行遍歷,從0至end ,執(zhí)行一次),而且在實(shí)際應(yīng)用中,它還必須被關(guān)閉。

當(dāng)關(guān)閉后,rs為null ,結(jié)果不再存在。

在這時(shí)我們就需要將 ResultSet 對(duì)象進(jìn)行遍歷到 list 中,代碼如下:

private static List convertList(ResultSet rs) throws SQLException {
? ? ? ? List list = new ArrayList();
? ? ? ? ResultSetMetaData md = rs.getMetaData();//獲取鍵名
? ? ? ? int columnCount = md.getColumnCount();//獲取行的數(shù)量
? ? ? ? while (rs.next()) {
? ? ? ? ? ? Map rowData = new HashMap();//聲明Map
? ? ? ? ? ? for (int i = 1; i <= columnCount; i++) {
? ? ? ? ? ? ? ? rowData.put(md.getColumnName(i), rs.getObject(i));//獲取鍵名及值
? ? ? ? ? ? }
? ? ? ? ? ? list.add(rowData);
? ? ? ? }
? ? ? ? return list;
? ? }

查看以上代碼,可以看出我們使用 Map 與 MetaDate 使 ResultSet 儲(chǔ)存到 list 中的,因?yàn)?list 只能存放元素的索引而不能存放元素的值,所以我們要用到 Map 。

使用這種方法的好處就是可以創(chuàng)建高復(fù)用性的代碼 ,因?yàn)槲覀儾恍枰看瓮ㄟ^(guò)指定鍵名取值。

實(shí)際工作間接,與君共勉。

代碼

package com.example.demo.test;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
?*JAVA將ResultSet結(jié)果集遍歷到List中
?* @author gblfy
?* @date 2020-10-14
?*/
public class getColumnName {

? ? public static void main(String[] args) throws SQLException, ClassNotFoundException {
? ? ? ? getColumnName getColumnName = new getColumnName();
? ? ? ? List list = getColumnName.selectDataFromJdbc();
? ? ? ? for (Object o : list) {
? ? ? ? ? ? System.out.println("ddd:" + o);
? ? ? ? }

? ? }

? ? public List selectDataFromJdbc() throws SQLException, ClassNotFoundException {

? ? ? ? Class.forName("oracle.jdbc.driver.OracleDriver"); //加載MYSQL JDBC驅(qū)動(dòng)程序
? ? ? ? String url = "jdbc:oracle:thin:@10.5.6.222:1521:lisdb";
? ? ? ? Connection conn = DriverManager.getConnection(url, "fisknow", "fisknow");
? ? ? ? Statement stat = conn.createStatement();
? ? ? ? String sql = "select u.user_id ,u.account,u.name from " + "sys_user u";
? ? ? ? // 格式: String sql = "select * from " + TableName where 1=1;
? ? ? ? ResultSet rs = stat.executeQuery(sql);
? ? ? ? List list = convertList(rs);
? ? ? ? stat.close();
? ? ? ? conn.close();
? ? ? ? return list;
? ? }

? ? private static List convertList(ResultSet rs) throws SQLException {
? ? ? ? List list = new ArrayList();
? ? ? ? ResultSetMetaData md = rs.getMetaData();//獲取鍵名
? ? ? ? int columnCount = md.getColumnCount();//獲取行的數(shù)量
? ? ? ? while (rs.next()) {
? ? ? ? ? ? Map rowData = new HashMap();//聲明Map
? ? ? ? ? ? for (int i = 1; i <= columnCount; i++) {
? ? ? ? ? ? ? ? rowData.put(md.getColumnName(i), rs.getObject(i));//獲取鍵名及值
? ? ? ? ? ? }
? ? ? ? ? ? list.add(rowData);
? ? ? ? }
? ? ? ? return list;
? ? }
}

使用泛型封裝結(jié)果集ResultSet遍歷成List集合

public  <T> List<T>  findModelListBySqlAndParam(String sql,List<Object> param,T t) throws Exception{
        //定義一個(gè)集合來(lái)存放需要轉(zhuǎn)成的對(duì)象集合
        List<T> list=new ArrayList<T>();
        //獲取當(dāng)前類
        Class<?> c=t.getClass();//泛型的反射機(jī)制(?問(wèn)號(hào)可寫(xiě)可不寫(xiě))java.lang.reflect
        //遍歷結(jié)果集,封裝成外界用戶所需要的對(duì)象集合
        //1>獲取結(jié)果集
        ResultSet rs=executeQuery(sql, param);
        //2>開(kāi)始遍歷
        while(rs.next()){
            //初始化對(duì)象
            @SuppressWarnings("unchecked")
            T obj= (T)c.newInstance();
            //獲取當(dāng)前類一共多少個(gè)屬性啊
            Field[] fields=c.getDeclaredFields();
            for(Field f:fields){
                //獲取當(dāng)前屬性的屬性名子
                String fname=f.getName();
                //獲取當(dāng)前的屬性的類型(簡(jiǎn)稱)  java.lang.String
                String type=f.getType().getSimpleName();

                //*****************  取出來(lái)當(dāng)前屬性對(duì)應(yīng)的數(shù)據(jù)庫(kù)的值了 ****************
                //在此方法名中要求類的屬性名和數(shù)據(jù)庫(kù)的字段名相同
                Object value=null;
                if(type.equalsIgnoreCase("string")){
                    value=rs.getString(fname);
                }else if(type.equalsIgnoreCase("int")){
                    value=rs.getInt(fname);
                }else if(type.equalsIgnoreCase("Integer")){
                    value=rs.getInt(fname);
                }else if(type.equalsIgnoreCase("Double")){
                    value=rs.getDouble(fname);
                }else if(type.equalsIgnoreCase("Float")){
                    value=rs.getFloat(fname);
                }else if(type.equalsIgnoreCase("date")){
                    value=rs.getDate(fname);
                }else if(type.equalsIgnoreCase("long")){
                    value=rs.getLong(fname);
                }
                //*****************  將取出來(lái)當(dāng)前屬性的值設(shè)置給當(dāng)前對(duì)象obj****************
                //1>獲取當(dāng)前對(duì)象的所有set方法,并找到當(dāng)前取出來(lái)的屬性對(duì)應(yīng)的set方法
                Method[] methods=c.getDeclaredMethods();//獲取所有的方法
                for(Method m:methods){
                    //獲取當(dāng)前方法名
                    String methodName=m.getName();
                    //判斷是不是當(dāng)前屬性
                    if(methodName.equalsIgnoreCase("set"+fname)){
                        //執(zhí)行該方法
                        m.invoke(obj, value);
                    }
                }
            }
            list.add(obj);
        }
        return list;
    }

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring bean生命周期配置過(guò)程解析

    Spring bean生命周期配置過(guò)程解析

    這篇文章主要介紹了Spring bean生命周期配置過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • java File類重要方法以及如何操作文件詳解

    java File類重要方法以及如何操作文件詳解

    這篇文章主要為大家介紹了java File類重要方法以及如何操作文件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Spring boot測(cè)試找不到SpringRunner.class的問(wèn)題

    Spring boot測(cè)試找不到SpringRunner.class的問(wèn)題

    這篇文章主要介紹了Spring boot測(cè)試找不到SpringRunner.class的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 詳解Java集合類之List篇

    詳解Java集合類之List篇

    這篇文章主要為大家詳細(xì)介紹一下Java集合類中List的用法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-07-07
  • SpringBoot集成FastDFS實(shí)現(xiàn)防盜鏈功能

    SpringBoot集成FastDFS實(shí)現(xiàn)防盜鏈功能

    FastDFS是一個(gè)高性能的分布式?件系統(tǒng),本文將為大家詳細(xì)介紹一下SpringBoot如何集成FastDFS實(shí)現(xiàn)防盜鏈功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Java中ArrayList和SubList的坑面試題

    Java中ArrayList和SubList的坑面試題

    集合是Java開(kāi)發(fā)日常開(kāi)發(fā)中經(jīng)常會(huì)使用到的,下面這篇文章主要給大家介紹了關(guān)于Java中ArrayList和SubList的坑面試題,需要的朋友可以參考下
    2022-05-05
  • Java中LocalCache本地緩存實(shí)現(xiàn)代碼

    Java中LocalCache本地緩存實(shí)現(xiàn)代碼

    本篇文章主要介紹了Java中LocalCache本地緩存實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Intellij?IDEA?的maven項(xiàng)目通過(guò)Java代碼實(shí)現(xiàn)Jetty的Http服務(wù)器(推薦)

    Intellij?IDEA?的maven項(xiàng)目通過(guò)Java代碼實(shí)現(xiàn)Jetty的Http服務(wù)器(推薦)

    Jetty是一個(gè)輕量級(jí)的高度可擴(kuò)展的基于 java的web服務(wù)器和servlet引擎,這篇文章主要介紹了Intellij?IDEA?的maven項(xiàng)目通過(guò)Java代碼實(shí)現(xiàn)?Jetty?的?Http服務(wù)器從而獲取到 Http 的 Get 和 Post 請(qǐng)求,需要的朋友可以參考下
    2022-07-07
  • Java Swing中的JButton、JComboBox、JList和JColorChooser組件使用案例

    Java Swing中的JButton、JComboBox、JList和JColorChooser組件使用案例

    這篇文章主要介紹了Java Swing中的按鈕(JButton)、組合框(JComboBox)、下拉列表(JList)和顏色選擇器(JColorChooser)組件使用案例,需要的朋友可以參考下
    2014-10-10
  • Java使用Apache POI操作Excel詳解

    Java使用Apache POI操作Excel詳解

    在Java中操作Excel是日常工作中經(jīng)常遇到的問(wèn)題,而Apache Poi是一種流行且廣泛使用的方式,它提供了各種庫(kù)和工具,所以本文就來(lái)詳細(xì)如何使用Apache Poi來(lái)進(jìn)行Excel文件操作吧
    2023-06-06

最新評(píng)論

临沂市| 惠来县| 闻喜县| 金昌市| 奉节县| 高碑店市| 扎兰屯市| 大新县| 灵寿县| 高淳县| 汕尾市| 类乌齐县| 临江市| 霍州市| 佛冈县| 建昌县| 桦川县| 永安市| 贡嘎县| 贺州市| 萨嘎县| 米脂县| 灌阳县| 南通市| 曲沃县| 普安县| 青阳县| 从江县| 博白县| 连江县| 富蕴县| 疏勒县| 寻甸| 长宁县| 西充县| 桂阳县| 沁水县| 延边| 综艺| 盘山县| 尉氏县|