实习日志--定时从数据库查询数据发送邮件

这篇博客记录了作者在大四实习期间实现的一个功能:使用Java Servlet和JDBC连接Oracle数据库,定时查询数据并发送邮件到指定邮箱。文章详细介绍了创建MailAuthenticator和MailOperation类来处理邮件发送,通过测试类确保数据库连接成功,以及实现定时任务和时间判断,以确保在特定时间发送邮件。最后,作者提到了数据库连接关闭的重要性,并表达了对指正和学习的期待。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大四实习期写的第一个小功能:要求是能定时查询数据发送到指定邮箱,使用JDBC连接Oracle数据库
————————————————我是一条分界线—————————————————————
创建MailAuthenticator类 用来保存发件人账号和密码

package cn.email;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 * 发件人账号密码
 * @author bear
 *
 */
public class MailAuthenticator extends  Authenticator{
   
   

    public static String USERNAME = "877083959@qq.com";
    public static String PASSWORD = "yigejiadeshouquanma";

    public MailAuthenticator() {
   
   
    }

    protected PasswordAuthentication getPasswordAuthentication() {
   
   
        return new PasswordAuthentication(USERNAME, PASSWORD);
    }

}

创建MailOperation邮件发送类

package cn.email;

import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;/**
 * 邮件发送操作类
 * 
 * @author bear
 * 
 */
public class MailOperation {
   
   

    /**
     * 发送邮件
     * @param user 发件人邮箱
     * @param password 授权码(注意不是邮箱登录密码)
     * @param host 
     * @param from 发件人
     * @param to 接收者邮箱
     * @param subject 邮件主题
     * @param content 邮件内容
     * @return success 发送成功 failure 发送失败
     * @throws Exception
     */
    public String sendMail(String user, String password, String host,
            String from, String to, String subject, String content)
            throws Exception {
   
   
        if (to != null){
   
   
            Properties props = System.getProperties();
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.auth", "true");
            MailAuthenticator auth = new MailAuthenticator();
            MailAuthenticator.USERNAME = user;
            MailAuthenticator.PASSWORD = password;
            Session session = Session.getInstance(props, auth);
            session.setDebug(true);
            try {
   
   
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(from));
                if (!to.trim().equals(""))
                    message.addRecipient(Message.RecipientType.TO,
                            new InternetAddress(to.trim()));
                message.setSubject(subject);
                MimeBodyPart mbp1 = new MimeBodyPart(); // 正文
                mbp1.setContent(content, "text/html;charset=utf-8");
                Multipart mp = new MimeMultipart(); // 整个邮件:正文+附件
                mp.addBodyPart(mbp1);
                // mp.addBodyPart(mbp2);
                message.setContent(mp);
                message.setSentDate(new Date());
                message.saveChanges();
                Transport trans = session.getTransport("smtp");
                trans.
<think>好的,用户想知道如何将PostgreSQL数据库迁移到达梦数据库的最佳实践和方法。我需要结合提供的引用内容来组织回答。首先,引用1提到了数据转换和兼容性的调整,包括数据结构、类型、索引等。引用2和3分别提到了使用Kettle工具和函数改写的问题,比如unnest和string_to_array的处理。用户可能需要具体的步骤和方法,比如评估阶段、工具选择、数据迁移步骤、验证测试等。还要注意函数和语法的兼容性问题,比如PostgreSQL特有的函数在达梦中的替代方案。同时,可能还需要提到性能优化和错误处理。需要确保回答结构清晰,分步骤说明,并引用提供的资料来支持每个步骤。另外,用户可能关心迁移过程中常见的坑和解决方法,比如数据类型的映射、约束的处理等。还要检查是否有遗漏的步骤,比如预处理、后处理阶段,以及测试和回滚计划。最后,生成相关问题,引导用户进一步思考可能遇到的问题。</think>### PostgreSQL迁移至达梦数据库最佳实践 #### 一、前期评估与准备 1. **数据库兼容性分析** 检查PostgreSQL特有功能(如数组类型、JSONB、窗口函数等)在达梦中的支持情况。例如,PostgreSQL的`unnest(string_to_array())`可改写为达梦支持的`str_split`函数[^2]。 2. **工具选择** - **Kettle(Pentaho Data Integration)**:支持跨平台数据迁移,通过可视化界面配置ETL流程,可自定义脚本处理复杂逻辑[^3]。 - **达梦DTS工具**:官方提供的数据传输服务,适合批量迁移且内置数据类型自动转换功能[^1]。 3. **环境配置** 在达梦数据库中预创建目标表结构时,需注意: - 将`serial`自增类型改为达梦的`IDENTITY(1,1)` - 转换`timestamp with time zone`为达梦的`TIMESTAMP` - 调整索引命名规则(达梦限制索引名长度) #### 二、迁移实施步骤 1. **模式对象迁移** ```sql -- PostgreSQL的JSONB字段转换示例 CREATE TABLE dm_user ( id INT IDENTITY(1,1), profile VARCHAR(4000) -- 达梦中使用CLOB或VARCHAR存储JSON ); ``` 2. **数据迁移** 使用Kettle配置转换作业: ```text 输入步骤:PostgreSQL表输入 → 转换步骤:字段类型映射(如text→VARCHAR、numeric→DECIMAL) → 输出步骤:达梦批量加载 ``` 需特别处理大字段(CLOB/BLOB),建议分批次提交。 3. **函数与存储过程改写** PostgreSQL示例: ```sql SELECT unnest(string_to_array('a,b,c', ',')); ``` 达梦改写方案: ```sql SELECT * FROM str_split('a,b,c', ','); -- 达梦8.1及以上版本支持 ``` #### 三、验证与优化 1. **数据一致性校验** 通过比对哈希值或抽样统计验证: ```sql -- PostgreSQL端 SELECT count(*), md5(array_agg(id ORDER BY id)::text) FROM table; -- 达梦端 SELECT count(*), sys_hash64(sys_group_concat(id ORDER BY id)) FROM table; ``` 2. **性能调优** - 迁移时关闭达梦的REDO日志(`SP_SET_PARA_VALUE(1, 'RLOG_APPEND', 0);`) - 使用达梦的dts工具时,调整`commit_rows=10000`减少提交次数 #### 四、常见问题处理 | PostgreSQL特性 | 达梦解决方案 | |----------------------|-----------------------------------| | 几何类型(POINT等) | 转换为VARCHAR或自定义类型 | | 物化视图 | 改用普通视图+定时刷新任务 | | PL/pgSQL语法 | 重写为达梦的PL/SQL(注意游标差异) | : 官方工具可自动处理70%以上的类型转换,但复杂约束需手动调整 : 字符串处理函数需要逐案适配 : Kettle的达梦插件需单独配置JDBC驱动
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值