pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

由 ResultSet 支持的 Java 迭代器

Java Iterator backed by a ResultSet(由 ResultSet 支持的 Java 迭代器)
本文介紹了由 ResultSet 支持的 Java 迭代器的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我有一個(gè)使用 ResultSet 作為數(shù)據(jù)成員來(lái)實(shí)現(xiàn) Iterator 的類.基本上這個(gè)類看起來(lái)像這樣:

I've got a class that implements Iterator with a ResultSet as a data member. Essentially the class looks like this:

public class A implements Iterator{
    private ResultSet entities;
    ...
    public Object next(){
        entities.next();
        return new Entity(entities.getString...etc....)
    }

    public boolean hasNext(){
        //what to do?
    }
    ...
}

我如何檢查 ResultSet 是否有另一行,以便創(chuàng)建有效的 hasNext 方法,因?yàn)?ResultSet 本身沒(méi)有定義 hasNext?我正在考慮執(zhí)行 SELECT COUNT(*) FROM... 查詢以獲取計(jì)數(shù)并管理該數(shù)字以查看是否還有另一行,但我想避免這種情況.

How can I check if the ResultSet has another row so I can create a valid hasNext method since ResultSet has no hasNext defined itself? I was thinking doing SELECT COUNT(*) FROM... query to get the count and managing that number to see if there's another row but I'd like to avoid this.

推薦答案

這是個(gè)壞主意.這種方法要求在讀取最后一行之前一直打開(kāi)連接,并且在 DAO 層之外你永遠(yuǎn)不知道它什么時(shí)候會(huì)發(fā)生,而且你似乎也讓結(jié)果集保持打開(kāi)狀態(tài),并在這種情況下冒著資源泄漏和應(yīng)用程序崩潰的風(fēng)險(xiǎn)連接超時(shí).你不想擁有那個(gè).

This is a bad idea. This approach requires that the connection is open the whole time until the last row is read, and outside the DAO layer you never know when it will happen, and you also seem to leave the resultset open and risk resource leaks and application crashes in the case the connection times out. You don't want to have that.

正常的 JDBC 實(shí)踐是在 最短 可能的范圍內(nèi)獲取 ConnectionStatementResultSet.通常的做法是將多行映射到一個(gè) List 或者可能是一個(gè) Map 并猜猜是什么,他們 確實(shí) 有一個(gè) Iterator.

The normal JDBC practice is that you acquire Connection, Statement and ResultSet in the shortest possible scope. The normal practice is also that you map multiple rows into a List or maybe a Map and guess what, they do have an Iterator.

public List<Data> list() throws SQLException {
    List<Data> list = new ArrayList<Data>();

    try (
        Connection connection = database.getConnection();
        Statement statement = connection.createStatement("SELECT id, name, value FROM data");
        ResultSet resultSet = statement.executeQuery();
    ) {
        while (resultSet.next()) {
            list.add(map(resultSet));
        }
    }

    return list;
}

private Data map(ResultSet resultSet) throws SQLException {
    Data data = new Data(); 
    data.setId(resultSet.getLong("id"));
    data.setName(resultSet.getString("name"));
    data.setValue(resultSet.getInteger("value"));
    return data;
}

如下使用:

List<Data> list = dataDAO.list(); 
int count = list.size(); // Easy as that.
Iterator<Data> iterator = list.iterator(); // There is your Iterator.

不要像最初想要的那樣將昂貴的數(shù)據(jù)庫(kù)資源傳遞到 DAO 層之外.有關(guān)常規(guī) JDBC 實(shí)踐和 DAO 模式的更多基本示例,您可以找到 這篇文章很有用.

Do not pass expensive DB resources outside the DAO layer like you initially wanted to do. For more basic examples of normal JDBC practices and the DAO pattern you may find this article useful.

這篇關(guān)于由 ResultSet 支持的 Java 迭代器的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Java Remove Duplicates from an Array?(Java從數(shù)組中刪除重復(fù)項(xiàng)?)
How to fix Invocation failed Unexpected Response from Server: Unauthorized in Android studio(如何修復(fù)調(diào)用失敗來(lái)自服務(wù)器的意外響應(yīng):在 Android 工作室中未經(jīng)授權(quán))
AES encryption, got extra trash characters in decrypted file(AES 加密,解密文件中有多余的垃圾字符)
AES Error: Given final block not properly padded(AES 錯(cuò)誤:給定的最終塊未正確填充)
Detecting incorrect key using AES/GCM in JAVA(在 JAVA 中使用 AES/GCM 檢測(cè)不正確的密鑰)
AES-256-CBC in Java(Java 中的 AES-256-CBC)
主站蜘蛛池模板: 电竞学校_电子竞技培训学校学院-梦竞未来电竞学校官网 | 高压分散机(高压细胞破碎仪)百科-北京天恩瀚拓 | 合肥风管加工厂-安徽螺旋/不锈钢风管-通风管道加工厂家-安徽风之范 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 耐酸泵,耐酸泵厂家-淄博华舜耐腐蚀真空泵 | 建大仁科-温湿度变送器|温湿度传感器|温湿度记录仪_厂家_价格-山东仁科 | 美侍宠物-专注宠物狗及宠物猫训练|喂养|医疗|繁育|品种|价格 | 物和码官网,物和码,免费一物一码数字化营销SaaS平台 | 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 自动部分收集器,进口无油隔膜真空泵,SPME固相微萃取头-上海楚定分析仪器有限公司 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 通风天窗,通风气楼,屋顶通风天窗,屋顶通风天窗公司 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | 郑州宣传片拍摄-TVC广告片拍摄-微电影短视频制作-河南优柿文化传媒有限公司 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 回转炉,外热式回转窑,回转窑炉-淄博圣元窑炉工程有限公司 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 纯水设备_苏州皙全超纯水设备水处理设备生产厂家 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 罐体电伴热工程-消防管道电伴热带厂家-山东沃安电气 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 火锅底料批发-串串香技术培训[川禾川调官网]| 德州网站开发定制-小程序开发制作-APP软件开发-「两山开发」 | 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | X光检测仪_食品金属异物检测机_X射线检测设备_微现检测 | 密度电子天平-内校-外校电子天平-沈阳龙腾电子有限公司 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 辊道窑炉,辊道窑炉厂家-山东艾希尔| 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 小程序开发公司-小程序制作-微信小程序开发-小程序定制-咏熠软件 |