如何使用java ArrayList中的值更新表?

时间:2015-07-20 12:25:00

标签: java sql sql-server jdbc

我正在处理我的应用程序,我希望在发送电子邮件后更新我的表格。我创建了连接sql数据库和java的函数,也在其他类中我创建了更新表的函数,但我需要的是这两个类在一起。我想在执行后使用我的数组列表来更新我的表。 这是我的连接和发送电子邮件的代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class TestSendEmails {
    private String emailTo;
    private String emailSubject;
    private String emailBody;
    private String emailAttachments;
    private Integer RecordId;

    public TestSendEmails(){

    }

    public TestSendEmails(String emailTo, String emailSubject, String emailBody, String emailAttachments, Integer RecordId){
        super();
        this.emailTo = emailTo;
        this.emailSubject = emailSubject;
        this.emailBody = emailBody;
        this.emailAttachments = emailAttachments;
        this.RecordId = RecordId;
    }

    public String getEmailTo(){
        return emailTo;
    }

    public void setEmailTo(String emailTo){
        this.emailTo = emailTo;
    }

    public String getEmailSubject(){
        return emailSubject;
    }

    public void setEmailSubject(String emailSubject){
        this.emailSubject = emailSubject;
    }

    public String getEmailBody(){
        return emailBody;
    }

    public void setEmailBody(String emailBody){
        this.emailBody = emailBody;
    }

    public String getEmailAttachments(){
        return emailAttachments;
    }

    public void setEmailAttachments(String emailAttachments){
        this.emailAttachments = emailAttachments;
    }

    public Integer getRecordId(){
        return RecordId;
    }

    public void setRecordId(Integer RecordId){
        this.RecordId = RecordId;
    }
}

class TestSendEmailD{
    private Connection con;

    private static final String GET_EMAILS = "Select* From Emails";

    private void connect() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
        con = DriverManager.getConnection("jdbc:sqlserver://100.000.000.00\\:3333;databaseName=Test;user=mmmm;password=1234");
    }

    public List<TestSendEmails> getTestSendEmails() throws Exception{
        connect();
        PreparedStatement ps = con.prepareStatement(GET_EMAILS);
        ResultSet rs = ps.executeQuery();
        List<TestSendEmails> result = new ArrayList<TestSendEmails>();
        while(rs.next()){
            result.add(new TestSendEmails(rs.getString("emailTo"), rs.getString("emailSubject"),rs.getString("emailBody"),rs.getString("emailAttachments",rs.getInt("RecordId"))));
        }
        disconnect();
        return result;
    }

    private void disconnect() throws SQLException{
        if(con != null){
            con.close();
        }
    }
}

class EmailSender{
    private Session session;

    private void init(){
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "100.000.000.00");
        props.put("mail.smtp.port", "678");

        session = Session.getInstance(props,
                  new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("test@gmail.com", "123");
                    }
                  });
    }

    public void sendEmail(TestSendEmails s) throws MessagingException{
        init();
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("test@gmail.com"));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(s.getEmailTo().replace(";", ",")));
        message.setSubject(s.getEmailSubject());
        message.setText(s.getEmailBody());
        message.setContent(s.getEmailBody(),"text/html");
        Transport.send(message);
        System.out.println("Done");
    }

    public void sendEmail(List<TestSendEmails> emails) throws MessagingException{
        for(TestSendEmails TestSendEmails:emails ){
            sendEmail(TestSendEmails);
        }
    }
}

这是我的更新代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Date;

public class UpdateEmail {
  public static Connection getConnection() throws Exception {
    String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String url = "jdbc:sqlserver://100.000.000.00\\:3333;databaseName=Test";
    String username = "mmmm";
    String password = "1234";
    Class.forName(driver);
    Connection conn = DriverManager.getConnection(url, username, password);
    return conn;
  }

  public static void main(String[] args) throws Exception {
    java.util.Date date = new Date();
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = getConnection();
      String query = "update Emails set SentOn = ? where Id = ? ";
      pstmt = conn.prepareStatement(query); // create a statement
      pstmt.setTimestamp(1, new java.sql.Timestamp(date.getTime()));
      pstmt.setInt(2, 200); // In this line I want to use my array-list to update my table.
      pstmt.executeUpdate(); // execute update statement
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    } finally {
      pstmt.close();
      conn.close();
    }
  }
}

我不确定是否必须在第二个程序中为我的更新创建新连接以及我应该在哪里实现更新代码。如果你知道我应该改变什么,请告诉我。提前谢谢。

Main.java代码:

import java.util.List;

public class Main {
    public static void main(String[] args) throws Exception {
        TestSendEmailD dao=new TestSendEmailD();
        List<TestSendEmails> list=dao.getTestSendEmails();
        EmailSender sender=new EmailSender();
        sender.sendEmail(list);
    }
}

2 个答案:

答案 0 :(得分:1)

我猜你有一个名为 yourList 的ArrayList()。以下代码在

之前

wlp/usr/servers/<yourservername>

String query ...

将您的查询更改为:

StringBuilder ids = "";
String prefix ="";
for (Integer id: yourList) {
     append(prefix);
     prefix = ",";
     ids.append(String.valueOf(id));
}

并仅发送 SentOn 作为参数:

String query = "update Emails set SentOn =? where Id in (" + ids.toString() + ")";

答案 1 :(得分:0)

        Connection conn = null;
        PreparedStatement pstmt = null;
        conn = getConnection();
        java.util.Date date = new Date();

        message.setFrom(new InternetAddress("test@gmail.com"));
        String query = "update Emails set SentOn = ? where Id = ? ";
        pstmt = conn.prepareStatement(query); // create a statement

        String str[]=String.valueOf(s.getRecordId()).split(";");//id1;id;id3;.... 
        for(int i=0;i<str.length();i++)
        {
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(s.getEmailTo().replace(";", ",")[i]));
        message.setSubject(s.getEmailSubject());
        message.setText(s.getEmailBody());
        message.setContent(s.getEmailBody(),"text/html");
        Transport.send(message);
        System.out.println("Done");

        pstmt.setTimestamp(1, new java.sql.Timestamp(date.getTime()));
        pstmt.setInt(2, str[i]); // In this line I want to use my array-list to update my table.
        pstmt.executeUpdate(); // execute update statement
        System.out.println(str[i]+" "+s.getEmailTo().replace(";", ",")[i]+" "+new java.sql.Timestamp(date.getTime()));//to check whether its working or not.
      }

这完全不是一个确切的答案。检查它是否有效。在这里你也必须照顾exceptions。我在这里没有写过这段代码。