gpt4 book ai didi

java - 从Java中的对象列表中检索字段

转载 作者:行者123 更新时间:2023-12-02 05:40:42 25 4
gpt4 key购买 nike

我编写了一个小程序来检索电子邮件队列表中的记录以处理和发送电子邮件。而使用JDBC来实现这一点,如下图:

  MySqlConnect con=new MySqlConnect();
public PreparedStatement preparedStatement = null;

public Connection con1 = con.connect();



//pick up queue and send email
public void email() throws Exception {


try{

while(true) {
String sql = "SELECT id,user,subject,recipient,content FROM emailqueue WHERE status='Pending' ";
PreparedStatement statement = con1.prepareStatement(sql);
ResultSet rs = statement.executeQuery();



while (rs.next()) {

String subject = rs.getString("subject");

String recipient = rs.getString("recipient");

String content = rs.getString("content");

String id = rs.getString("id");
String username = rs.getString("user");

String emailStatus = "DONE";
String errormsg=sendEmail(recipient, subject, content, id,username);
if (!errormsg.equals("")) {
emailStatus = "FAILED";

}
TerminalLogger.printMsg("Status : " + emailStatus);

}
statement.close();
rs.close();

}
}

}catch(Exception e){

e.printStackTrace();
TerminalLogger.printMsg("Exception: "+e.toString());

}

con1.close();
Thread.sleep(2000);

}

上面的方法工作正常,因为它检索状态为待处理的电子邮件记录,并将主题、内容、收件人等传递给 sendemail 方法并完成。

我想实现相同的目标,但使用 JPA 持久性。所以我写了这个方法:

public Object getrecords() {
try {

String sql = "select p.id,p.user,p.subject,p.recipient,p.content from Emailqueue p where " +
"status='Pending'";

List<Object[]> resList =(List<Object[]>) em.createQuery(sql).getResultList();
if (resList == null) {
throw new Exception("Error with selection query.");
}

if (resList.size() > 0) {
return resList;
}

// msg = "Setting <" + name + "> not found.";

return null;
} catch (Exception e) {

msg = CoreUtil.wrapMsg(CoreUtil.FUNC_ERROR,
this.getClass().getName(), "get(" + "Pending" + ")", e.getMessage());


return null;
}
}

检索表中的记录和大小没有问题。我在 email() 中调用了这个方法。像这样的东西:

Object records = ejbCon.getSettingsFacade().getrecords();

从这里开始,我无法弄清楚如何循环记录以获取每个字段中的每个值。例如,如果有 2 条待处理的电子邮件记录,我应该需要检索其每条内容、主题、收件人等,然后传递给 sendemail 方法。

此外,检索这些记录已经给我的程序带来了负担,因为与使用 JDBC 相比,它需要很长时间才能关闭应用程序(它更快,而且我猜效率更高?)。

所以,我还需要考虑使用这种方法的性能。

编辑

我应该更好地澄清这一点,以解释我想要实现的目标。所以我有以下形式的电子邮件队列表:

id  user  subject content recipient           status
1 user1 test example abc@example.com Pending
2 user2 test2 example cde@example.com Pending

因此,在此之前,我在 JDBC 中使用结果集来获取 id:1 的每个单独字段值,并将它们传递给 send 方法,然后继续处理 id:2 并执行相同的迭代操作。现在我想通过使用我检索的对象来实现相同的方式,但我无法指定它能够获取哪些字段值。所以我被困住了。

最佳答案

有很多方法可以实现您想要的结果,但最简单的方法是在 Emailqueue 类中创建参数化构造函数并将查询更改为

    String sql = "select NEW 
Emailqueue(p.id,p.user,p.subject,p.recipient,p.content) from Emailqueue p
where " +
"p.status='Pending'";
List<Emailqueue> resList =(List<Emailqueue>)
em.createQuery(sql).getResultList();

这样您就可以正常使用 foreach 循环迭代 List。

关于java - 从Java中的对象列表中检索字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56141425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com