java - 使用 SQL Server sp_send_dbmail 从 java 发送电子邮件

标签 java sql-server-2012 email

我正在尝试使用 SQL Server sp_send_dbmail 从 java 发送电子邮件

从 SQL Server 本身内部,以下内容可以很好地发送 HTML 电子邮件。 [IE。我已按照以下步骤正确设置了发送电子邮件的所有内容 Microsoft's instructions ]

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'example profile',
    @recipients = 'me@example.com',
    @body = @tableHTML,
    @body_format = 'HTML' ,
    @subject = 'Email from SQL Server';

但是当尝试使用以下代码从 java 发送时

public static synchronized int sendEmail(String profileName,String recipients,String body, String body_format,String subject) {
        final String sendEmailStr = "{execute msdb.dbo.sp_send_dbmail (?,?,?,?,?,?)}";
        dbConn  = DBConnection.getInstance();
        Connection conn = dbConn.getConnection();
        CallableStatement stmt = null;
        int result = RESULT_FAILED;
        try {
            stmt = conn.prepareCall(sendEmailStr);
            stmt.setString("profile_name", profileName);
            stmt.setString("recipients", recipients);
            stmt.setString("body", body);
            stmt.setString("body_format", body_format);
            stmt.setString("subject", subject);

            stmt.registerOutParameter(6, java.sql.Types.INTEGER);
            stmt.execute();
            result = stmt.getInt(6);
        } catch(SQLException e) {
            System.out.println(e);
            Log.getInstance().write("Exception on sendEmail " + e.toString());
        } finally {
            try {
                stmt.close();
                dbConn.returnConnection(conn);
            } catch(SQLException e) {
                System.out.println(e);
                Log.getInstance().write("Exception on sendEmail " + e.toString());
            }
        }
        return result;
    }

我收到以下异常com.microsoft.sqlserver.jdbc.SQLServerException:com.microsoft.sqlserver.jdbc.SQLServerException:未为存储过程定义参数profile_name

我做错了什么?

最佳答案

请更改您的查询字符串以使用call,如下所示:

 final String sendEmailStr "{ call msdb.dbo.sp_send_dbmail (?,?,?,?,?,?) }";

要使用当前数据库中的存储过程,请在当前数据库中执行此命令,以通过本地过程包装 MSDB 调用:

  Use [MyDatabase]; 
     CREATE PROCEDURE [MyDB].[SEND_EMAIL_DB] 
       @profile_name2 varchar(max), 
       @recipients2 varchar(max), 
       @body2 varchar(max), 
       @body_format2 varchar(max), 
       @subject2 varchar(max), 
       @p_result int OUTPUT 
     AS 
       BEGIN  
          exec msdb.dbo.sp_send_dbmail  @profile_name=@profile_name2,
                   @recipients=@recipients2,@body=@body2,
                   @body_format=@body_format2,@subject=@subject2 
       END

关于java - 使用 SQL Server sp_send_dbmail 从 java 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13055162/

相关文章:

java - 未报告的异常 java.lang.ClassNotFoundException;必须被捕获或宣布被抛出

sql-server-2012 - SQL Server更改主键数据类型

sql - 如何插入到使用顺序GUID作为主键的表中?

html - 电子邮件中的表格单元格高度问题

java - 如何指定正则表达式中字符类中的某个字符至少出现一次?

Java 子类属性是否绑定(bind)?

java - 如何通过lua使用其他语言库/框架?

java - R中的自定义距离度量,用于聚集聚类

sql - 无法在多个表之间进行所需的联接

python - 将 MailChimp 与 SendGrid 结合使用