这是对上个程序进行了功能添加

上次程序得到的所有简历信息均都存在了Excel表中,但是最终要对这些数据进行去重的处理—-需要对获取到的每条简历信息与数据库的表内信息进行判断是否有重复的情况,新的数据才会存储在Excel表中,同时,也存在数据库的Resume的数据表中

  • 连接数据库
  • 修改部分代码

java 连接数据库

对于连接数据库的方法,我也是在网上找来的,现在写这篇博客的目的是自己重新回顾复习下以及与大家分享交流

这个就要使用另一个jar包了,下载链接如下,导入Java的工程里就能用了:
http://download.csdn.net/detail/yixiesuifeng/9833096

我将连接数据库的代码封装成了一个方法,返回一个Connection连接对象,代码如下:

//连接数据库并打开,返回一个Connection对象
//连接数据库,返回Connection对象
public static Connection openMySql(){/*数据库名称:a1* 数据表名字:test1* 端口号:3306* 用户名:root* 密码:root* 以上信息需要提前准备好!!!*/Connection con=null;//声明Connection对象String driver = "com.mysql.jdbc.Driver";//驱动程序名String url = "jdbc:mysql://localhost:3306/a1?useUnicode=true&characterEncoding=UTF-8";//URL指向要访问的数据库名mydataString user = "root";//MySQL配置时的用户名String password = "root";//MySQL配置时的密码try{        Class.forName(driver);//①getConnection()方法,连接数据库con = DriverManager.getConnection(url,user,password);if(!con.isClosed()){System.out.println("成功的连接上数据库!!!");}}catch(ClassNotFoundException e){System.out.println("数据库驱动异常!!!");}catch(SQLException e){System.out.println("sql语句的执行出现问题!!!");}return con;
}

另外,在运行程序前要记得启动数据库的服务器,我电脑安装的时Apache服务器,端口是3306,数据库是从PHPAdmin的终端打开的。

既然返回的有对象,那么就在receive()的方法里调用了这个对象,另外,Connection co作为参数还需要传到其他的方法里面去调用,最后在receive()的方法里关闭数据库的连接con.close();

修改的思路如下:

1、连接上数据库,即调用openMySql(),程序内的部分方法添加Connection的参数;
2、对每一封邮件都要进行解析,那么parseMessage(Connection con,Message …messages)内Connection参数也要添加了;
3、解析过程中要多添加一个判断语句,就是手机号的判断,在主题及时间判断完后再判断数据库表内是否有相同号码的存在……
修改后的parseMessage()方法代码如下:

public static void parseMessage(Connection con,Message ...messages) throws MessagingException, IOException {  if (messages == null || messages.length < 1)   throw new MessagingException("未找到要解析的邮件!");  //58简历整理工具,使用正则表达式匹配相应的信息:姓名,性别,年龄,电话,邮箱,经验Pattern p1 = Pattern.compile("<h3.*?>([\\s\\S]*)<span.*?>([\\s\\S]*)</span></h3>");Pattern p2 = Pattern.compile("<label.*?>([\\s\\S]*)<span.*?><span.*?>([\\s\\S]*)</span></span></label>");Pattern p3 = Pattern.compile("<ul.*?>[\\s]*?<li.*?>([^\n]*)</li>[\\s]*?<li.*?>([^\n]*)</li>[\\s]*?<li.*?>([^\n]*)</li>[\\s]*?<li.*?>([^\n]*)</li>[\\s\\S]*?</ul>");Pattern p4 = Pattern.compile("<label.*?>([\\s\\S]*)<span.*?>([\\s\\S]*)</span></label>");//斗米简历整理工具,使用正则表达式匹配相应的信息:姓名,性别,年龄,电话,邮箱,经验//???Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd_hh:mm:ss");//可以方便地修改日期格式String nowDate = dateFormat.format( now ); System.out.println(nowDate);Calendar c = Calendar.getInstance();//可以对每个时间域单独修改int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH)+1; int date = c.get(Calendar.DATE); try{//创建及打开Excel表,存储58同城的简历信息String path="C:\\resume\\58Resume"+year+"."+month+"."+date+".xlsx";//String path="/Users/LiuDuan/workspace/temp_edm/58Resume"+year+"."+month+"."+date+".xlsx";//InputStream is = new FileInputStream("C:\\Users\\yang\\Desktop\\ResumeData.xlsx");;WritableWorkbook wb = Workbook.createWorkbook(new File(path));WritableSheet ws = wb.createSheet("Sheet1", 0);//创建及打开Excel表,存储58同城的简历信息int j=0;int count = messages.length;// 解析所有邮件 for (int i = 130; i < count; i++) {  MimeMessage msg = (MimeMessage) messages[i]; //解决邮件主题乱码的问题String subject1 = getSubject(msg); //获得邮件主题String subject = "";//前面必须判断下是否为null,否则会有异常if (subject1 ==null || subject1 == "" || "".equals(subject1)|| "null".equals(subject1)) {subject = "此邮件没有主题";continue;} else {subject = subject1;}//System.out.println("第"+i+"封邮件主题是: " + subject);String str=getSentDate(msg, null);System.out.println("------发送时间:" +str);//if(subject.indexOf("58.com")>0 && nowDate.equals(getSentDate(msg, null))){if(subject.indexOf("58.com")>0 &&judgeDate(nowDate,str)){StringBuffer content = new StringBuffer(300); getMailTextContent(msg, content);//System.out.println(content);//checkhtml(content.toString(),i);//得到每条邮件的三个信息Matcher m = p1.matcher(content);Matcher n = p2.matcher(content);Matcher p = p3.matcher(content);Matcher q = p4.matcher(content);StringBuilder sb = new StringBuilder();if (n.find()) {//存在手机号的话进行判断是否与数据库有重复boolean is_new_phone=true;String ephone=n.group(2);try{//对于每次读邮件时需要重新执行一次select * from 数据表名//对每一封主题和时间都符合条件的邮件都进行一次查询Statement statement=con.createStatement();//创建statement对形象,用来执行SQL语句String sql = "select * from resume where phone="+ephone+" limit 0,1";//编写要执行的SQL语句ResultSet rs=statement.executeQuery(sql);//③ResultSet类,执行SQL语句,用来存放获取的结果集//System.out.println("执行结果如下:");String dphone=null;if(rs.next()){is_new_phone=false;}else{String sql_for_member = "select * from member where phone="+ephone+" limit 0,1";//编写要执行的SQL语句ResultSet rs_for_member=statement.executeQuery(sql_for_member);//③ResultSet类,执行SQL语句,用来存放获取的结果集//System.out.println("执行结果如下:"); if(rs_for_member.next()){System.out.println(rs_for_member.getString(1));is_new_phone=false;}                               }if(is_new_phone){String s1=null,s2=null,s3=null,s4=null,s5=null;if (m.find()) {//添加姓名、性别、年龄s1=m.group(1);s2=m.group(2).substring(1, 2);s3=m.group(2).substring(3, 5);sb.append(m.group(1)+","+m.group(2));Label label1 = new Label(0,j,s1);ws.addCell(label1);Label label2 = new Label(1,j,s2);ws.addCell(label2);Label label3 = new Label(2,j,s3);ws.addCell(label3);sb.append(",");  }sb.append(ephone);//添加手机号Label label4 = new Label(3,j,ephone);ws.addCell(label4);sb.append(",");if (p.find()) {//工作经验for(int ii=1;ii<p.groupCount();ii++){if(p.group(ii).indexOf("家教")>-1 || p.group(ii).indexOf("经验")>-1){s4=p.group(ii);break;}}//s4=p.group(2);sb.append(s4); Label label5 = new Label(4,j,s4);ws.addCell(label5);sb.append(",");}if (q.find()) {//邮箱号s5=q.group(2);sb.append(q.group(2)); Label label6 = new Label(5,j,s5);ws.addCell(label6);sb.append(",");}System.out.println(sb);SimpleDateFormat sdf_hms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  String dateStr = sdf_hms.format(new Date());String ss = "insert into resume (name, sex,age,phone,experience,email,source,date_add) values ('"+s1+"','"+s2+"','"+s3+"','"+ephone+"','"+s4+"','"+s5+"','58','"+dateStr+"')";statement.execute(ss);}rs.close();}catch(SQLException e){e.printStackTrace();System.out.println("sql语句的执行出现问题!!!");}}j++;}else{continue;}}wb.write();wb.close();}catch(IOException e){e.printStackTrace();System.out.println("parseMessage内部1");}catch(MessagingException e){e.printStackTrace();System.out.println("parseMessage内部2");}catch (RowsExceededException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (WriteException e) {// TODO Auto-generated catch blocke.printStackTrace();}} 

之前的程序运行后再数据表中发现了一个错误,就是匹配的工作经验处的信息有误,所以这次稍稍修改了p3及p.find()出的代码!!!!!!

这次需要添加的头文件如下,供参考:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

另外,这次修改敲代码时出现最多的错误就是SQL语句的编写规范,单引号双引号什么的错误多多,说明了自己这方面还得多加练习。

Java登录QQ邮箱整理邮件的58的简历(二)相关推荐

  1. Java登录QQ邮箱整理邮件的58的简历(一)

    Java登录QQ邮箱整理邮件的58的简历 实习期间给公司做的第一个小工具,只需下载jxl.jar和mail.jar的第三方那个类库,就可以着手敲代码了: 1.此次是使用POP3协议登录的邮箱,使用了手 ...

  2. python登录qq邮箱爬邮件_python实现QQ邮箱发送邮件

    本文实例为大家共享了python实现QQ邮箱发送邮件的详细代码,供大家参考,详细内容如下 1.代码: #!/usr/bin/python # -*- coding: utf-8 -*- import ...

  3. java 给qq邮箱发邮件_java实现163邮箱发送邮件到qq邮箱成功案例

    这篇文章主要为大家分享了java实现163邮箱发送邮件到qq邮箱成功案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 下载和上传附件.发送短信和发送邮件,都算是程序中 ...

  4. java 给qq邮箱发邮件_用java写一个给自己QQ邮箱发一封电子邮件的程序

    首先,需要各位去java官网下载JavaMail mail.jar 和JAF activaton.jar,本程序使用的分别是1.4.5和1.1.1版本,在这里也给大家贴上链接,点击打开链接 接下来大家 ...

  5. java 给qq邮箱发邮件_Java使用QQ邮箱给其他邮箱发邮件

    个人微信小程序可以扫码体验 引入了2个jar包 javax.mail javax.mail-api 1.5.5 com.sun.mail javax.mail 1.5.4 获取QQ邮箱的授权码 开启. ...

  6. 使用Python登录QQ邮箱发送QQ邮件

    这真是黑科技啊,原来推送的广告邮件就是这样产生的.好人用来发节日贺卡,给女朋友纪念邮件:坏人会学着发广告,垃圾邮件.我希望大家能学会了做些有趣的有意义的事情. 今天我带大家实现下简单的发邮件功能.我们 ...

  7. 利用jmail qq邮箱发邮件 报错 解决方法

    利用java的jmail,登录qq邮箱发邮件时遇到下面几个问题,分享一下解决方法. 1. qq需要使用ssl  解决方法:使用有ssl安全认证的代码 <span style="font ...

  8. 使用QQ邮箱接收邮件报警设置步骤

    1. 登录 QQ 邮箱,点击"设置"–>"账户"选项 2. 找到 "POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV ...

  9. Java 发送QQ邮箱邮件

    2019独角兽企业重金招聘Python工程师标准>>> 如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成: props.put(" ...

最新文章

  1. java cron表达式_Java 程序员都应该去使用一下这款强大的国产工具类库
  2. 如何快速解决虚拟机中的CentOS7无法上网的方式
  3. 第三次学JAVA再学不好就吃翔(part80)--List三个子类的特点
  4. spark集群详细搭建过程及遇到的问题解决(四)
  5. esb 和 开源esb_如果今天完成,ESB会是什么样子?
  6. CF758 D. Ability To Convert 细节处理字符串
  7. mysql表不存在_MySQL表不存在。但这确实(或者应该如此)
  8. Python 多线程中死锁了怎么办?
  9. 【C++实现python字符串函数库】strip、lstrip、rstrip方法
  10. springboot+Vue在线考试系统
  11. android5.1导航系统,北斗地图导航系统
  12. /etc/login.defs配置文件详解
  13. 青龙面板扩展定时任务——九章头条
  14. 高分一号WFV影像云检测工具(免费)
  15. 采用Cordic算法求解atan反正切角度
  16. 消息重试框架 Spring-Retry 和 Guava-Retry,这个框架有点意思
  17. VQLS:变分量子算法解线性方程组
  18. python求导并作图_科学网—python-符号运算(求导等) - 夏江江的博文
  19. CMNET和CMWAP的区别和适用范围
  20. hpp文件和h文件有什么区别

热门文章

  1. 【ZZULIOJ】1049: 平方和与立方和
  2. Python全栈开发,Day7 - 面向对象学习
  3. easelJS 初始入门 (creatjs)
  4. pdf怎么转换成ppt呢?看完每个人都会
  5. opencv随笔记录:2.anaconda+windows系统下实现视频目标识别yolov3
  6. PHOTOSHOP快捷键[隐藏的]
  7. 程序员大牛们的经典语录
  8. 怎么删除PDF文件中的页面?教你两招删除方法
  9. 1.JSJQ课程期末复习之复习JS
  10. 第二节:Python要点