Я написал программу, в которой разрешил моей программе бесконечно собирать записи из моей таблицы emailqueue
, чтобы она могла обрабатывать записи и отправлять электронную почту посторонним. Сначала код выглядит так:
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();
}
Как видите, я использовал драйвер JDBC, чтобы получить значение каждого столбца в таблице и передал их sendEmail
, где он работает, чтобы отправлять электронную почту. Конечно, пока все работает без нареканий.
Теперь я хочу достичь той же цели с помощью JPA, потому что я хочу больше узнать об этом, и я новичок в этом. Поэтому я добавил отображение базы данных в свою таблицу электронной почты, как показано ниже:
Emailqueue.java
@Entity
@Table(name = "emailqueue")
public class Emailqueue {
private long ulnodeid;
private String user;
private String subject;
private String recipient;
private String content;
private String status;
@Id
@Column(name = "ID")
public long getUlnodeid() {
return ulnodeid;
}
public void setUlnodeid(long ulnodeid) {
this.ulnodeid = ulnodeid;
}
@Basic
@Column(name = "USER")
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
@Basic
@Column(name = "SUBJECT")
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
@Basic
@Column(name = "RECIPIENT")
public String getRecipient() {
return recipient;
}
public void setRecipient(String recipient) {
this.recipient = recipient;
}
@Basic
@Column(name = "CONTENT")
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Basic
@Column(name = "STATUS")
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Emailqueue that = (Emailqueue) o;
return ulnodeid == that.ulnodeid &&
user == that.user &&
Objects.equals(subject, that.subject) &&
Objects.equals(recipient, that.recipient) &&
Objects.equals(content, that.content) &&
Objects.equals(status, that.status);
}
@Override
public int hashCode() {
return Objects.hash(ulnodeid, user,subject,recipient,content,status);
}
}
Я написал метод для извлечения записей из таблицы, используя Entity Manager, ниже:
public Emailqueue getrecords() {
try {
String sql = "select object(o) from Emailqueue as o where " +
"status='" + "Pending" + "'";
List resList = em.createQuery(sql).getResultList();
if (resList == null) {
throw new Exception("Error with selection query.");
}
if (resList.size() > 0) {
return (Emailqueue) resList.get(0);
}
// 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;
}
}
Мне в основном нужны recipient,subject,content,id and username
записи, чтобы я мог передать их вметод.Как получить значения для каждой строки, в которой статус находится в состоянии ожидания в этом случае, с использованием JPA?
Редактировать:
Используя цикл for:
public void email() throws Exception {
try{
while(true) {
String sql = "select p.id,p.user,p.subject,p.recipient,p.content from Emailqueue p where " +
"status='Pending'";
List<Emailqueue> emailList = em.createQuery(sql).getResultList();
for (Emailqueue obj : emailList) {
String emailStatus = "DONE";
String errormsg=sendEmail(obj.getRecipient(), obj.getSubject(), obj.getContent(),obj.getUlnodeid(),obj.getUser());
if (!errormsg.equals("")) {
emailStatus = "FAILED";
}
TerminalLogger.printMsg("Status : " + emailStatus);
}
}