使用 jdbi 迭代 ResultIterable 对象

Posted

技术标签:

【中文标题】使用 jdbi 迭代 ResultIterable 对象【英文标题】:Iterating over a ResultIterable object using jdbi 【发布时间】:2019-02-15 20:05:19 【问题描述】:

昨天我发布了一个关于从数据库中检索数据并对其进行迭代的问题。有人帮助我指出了 JDBI 并远离了原始数据类型。

注意事项:我首先是一名测试人员,并且刚刚开始探索 JDBI 以进行一些自动化测试。

所以,我认为我已经改进了以前的解决方案,但我只是在努力实现迭代我的数据集的最佳方法,现在它已被检索。

这是我返回数据集的方法:

    public List<FlightDataBean> lastFlightBookedResults(String supplierCode, String channel) 

    String sqlQuery = getData(supplierCode, channel);

    List<FlightDataBean> dataSet = jdbi.withHandle(handle ->
            handle.createQuery(sqlQuery)
                    .mapToBean(FlightDataBean.class)
                    .list());

    return dataSet;

这是我的 Bean 类:

public class FlightDataBean 

private String startDate;
private String origin;
private String destination;

public FlightDataBean()



public FlightDataBean(String startDate, String origin, String destination) 
    this.startDate = startDate;
    this.origin = origin;
    this.destination = destination;



public String getStartDate() 
    return startDate;


public void setStartDate(String startDate) 
    this.startDate = startDate;


public String getOrigin() 
    return origin;


public void setOrigin(String origin) 
    this.origin = origin;


public String getDestination() 
    return destination;


public void setDestination(String destination) 
    this.destination = destination;



这里是一个返回数据集的例子,30行3列:

显然我可以通过这样做来检索单个结果:

 List<FlightDataBean> resultSet;
    resultSet = getFlightData(syndicatorName);

    String startDate = (resultSet.get(0).getStartDate());
    String origin = String.valueOf((resultSet.get(1)).getOrigin());
    String destination = String.valueOf(resultSet.get(2).getDestination());

我只需要一个关于迭代所有 30 个的最佳/最有效/最安全方法的指针,因为我将结果用作搜索测试数据,并且需要在使用数据集的进一步方法中依次使用每个结果直到它在网站上获得结果。

我正在继续学习 JDBI,但同时任何帮助都会很棒

【问题讨论】:

【参考方案1】:

我已经用类似的答案回答了你的最后一个问题......你可以熟练地使用代码来适应你当前的情况:

for (FlightDataBean i : resultSet)
    String startDate = i.getStartDate();
    String origin = i.getOrigin();
    String destination = i.getDestination();
    //further code, go on from here.

for 循环除了为结果集中的每个 Bean 提取 3 个值(然后执行您之后添加的代码)外,什么都不说。

【讨论】:

以上是关于使用 jdbi 迭代 ResultIterable 对象的主要内容,如果未能解决你的问题,请参考以下文章

在“pyspark.resultiterable.ResultIterable”上调用 Distinct

Playframework 1.2.5 和 JDBI

如何在 JDBI 中动态绑定表名

JDBI DAO 实例可以复用吗?

将 JDBI 与不支持预准备语句的 JDBC 驱动程序一起使用

数据库中间件-jdbi