Java 如何将结果从控制台输出到电子邮件?

Java 如何将结果从控制台输出到电子邮件?,java,email,jdbc,Java,Email,Jdbc,我正在从事一个使用JDBC和java邮件的java项目。我正在尝试将运行SQL语句得到的输出发送到电子邮件中 问题是msg.setText()是静态的,它是将文本插入电子邮件正文的方法。因此,我不能将任何执行SQL语句的方法作为参数放在其中,因为我不能对非静态方法进行静态引用 如何将输出(控制台中的结果)发送到电子邮件地址 控制台的预期输出如下: ALLDONE: 0 COUNT(1): 0 IN_AC_IND: 0 Billing Count(1): 0 Signon: 0 因此,在电子邮件

我正在从事一个使用JDBC和java邮件的java项目。我正在尝试将运行SQL语句得到的输出发送到电子邮件中

问题是msg.setText()是静态的,它是将文本插入电子邮件正文的方法。因此,我不能将任何执行SQL语句的方法作为参数放在其中,因为我不能对非静态方法进行静态引用

如何将输出(控制台中的结果)发送到电子邮件地址

控制台的预期输出如下:

ALLDONE: 0
COUNT(1): 0
IN_AC_IND: 0
Billing Count(1): 0
Signon: 0
因此,在电子邮件的正文中,这将是整个消息

The code: 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; 
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class test {

    Connection conn; 

    public static void main (String[] args) {

    new test();
     email();

      } // end of main class

    public static void email(){
        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
          // Get a Properties object
             Properties props = System.getProperties();
             props.setProperty("mail.smtp.host", "smtp.gmail.com");
             props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
             props.setProperty("mail.smtp.socketFactory.fallback", "false");
             props.setProperty("mail.smtp.port", "587");
             props.setProperty("mail.smtp.socketFactory.port", "587");
             props.put("mail.smtp.auth", "true");
             props.put("mail.debug", "true");
             props.put("mail.store.protocol", "pop3");
             props.put("mail.transport.protocol", "smtp");
             final String username = "user";//
             final String password = "pass";
             try{
             Session session = Session.getDefaultInstance(props, 
                                  new Authenticator(){
                                     protected PasswordAuthentication getPasswordAuthentication() {
                                        return new PasswordAuthentication(username, password);
                                     }});

           // -- Create a new message --
             Message msg = new MimeMessage(session);

          // -- Set the FROM and TO fields --
             msg.setFrom(new InternetAddress("email"));
             msg.setRecipients(Message.RecipientType.TO, 
                              InternetAddress.parse("email",false));
             msg.setSubject("Daily Activity Report");
             msg.setText("This is a test email ");
             msg.setSentDate(new Date());
             Transport.send(msg);
             System.out.println("Message sent.");

          }catch (MessagingException e){ System.out.println("Error: " + e);}
    }

    public test() {
        try
        {

            Class.forName("value");
            conn = DriverManager.getConnection("value", "value" , "value");
            execute();
            conn.close();

        }catch (ClassNotFoundException ex) {System.err.println(ex.getMessage());
        }catch (SQLException ex)           {System.err.println(ex.getMessage());}
        }

    public void execute() {
        method();
        // someOtherMethod();
        method2();
        method3();
    }

    public void method(){
    String query = "SELECT ALLDONE FROM table";
    try{
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery(query);
        while (rs.next())
        {
            String s = rs.getString ("ALLDONE");
            System.out.println("ALLDONE: " + s);
        }
    }catch (SQLException ex){
        System.err.println(ex.getMessage());
    }
您需要让“方法”返回一个字符串。以下是它的改写版本:

public String method()
{
    String query = "SELECT ALLDONE FROM table";
    StringBuilder retval = new StringBuilder("");
    try
    {
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery(query);
        while (rs.next())
        {
            String s = rs.getString("ALLDONE");
            retval.append(s + "\n");
            System.out.println("ALLDONE: " + s);
        }
    }
    catch (SQLException ex)
    {
        System.err.println(ex.getMessage());
    }
    return retval.toString();
}

请注意,除了使用System.out.println将结果打印到控制台外,我们还将它们添加到StringBuilder中,然后将它们作为字符串返回。

查看您的代码,您提到的方法不是静态的。那么为什么不能这样做:msg.setText(method())?因为没有定义方法。您是否定义了它,但将其从示例中遗漏了?是的,我故意遗漏了它。这是我得到的错误:类型部分中的方法setText(String)不适用于程序能够运行的参数(void),但它向电子邮件地址发送了一条空白消息。我还必须使连接是静态的,方法()也是静态的。所以,更改是静态连接conn和public static String method()。这太棒了@Codes316,那么也许您可以投票/接受我的答案?很抱歉,我的意思是它没有输出方法()的结果,它只发送一条空白消息。我非常感谢你的帮助!