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

上次程序得到的所有简历信息均都存在了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. 图论(八)最小生成树
  2. linux配置usb主从_一种Linux下USB设备主从切换的实现
  3. DCMTK:创建和验证DICOM数字签名
  4. 【万能小说分析】【python】【词频分析】【词频统计】【jieba】【matplotlib】【wordcloud】【绘图】
  5. 打印某个user在指定时间段内做过的personalization detail
  6. 不要以为学java,.net或VB的就很牛
  7. ES6学习(新增字符串方法)
  8. 无法ping通别的计算机名,解决主机无法ping通问题
  9. 数据安全之数据分类分级系统建设
  10. 《东周列国志》第二十三回 卫懿公好鹤亡国 齐桓公兴兵伐楚
  11. Android 科大讯飞语音评测SDK 踩坑实录
  12. 自问自答系列——商城相关
  13. 教你给大量视频快速调整色调的方法
  14. php字符串去空格函数,php去掉字符串中的空格
  15. 【C语言】猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
  16. checkpoint = torch.load(args.state_dict) ->RuntimeError: CUDA error: out of memory
  17. java文件预览_java 在线预览doc,pdf
  18. tex 表格中内容左对齐/居中/右对齐
  19. airpods pro是按压还是触摸_山寨版AirPods Pro拆解:真是一绝!
  20. 【Taip】Java快速开发腾讯人工智能AI接入

热门文章

  1. 6款jQuery图表插件
  2. C方法中定义静态static字段是什么意思?
  3. hdu 4741 Save Labman No.004
  4. 申请无线电台执照-保姆级教程
  5. 劈尖干涉matlab,基于Matlab的劈尖干涉仿真
  6. 微信小程序之一键复制
  7. 微信开放平台(第三方平台)代替微信公众号发送模板消息(基于lavarel框架开发,EasyWeChat)
  8. IE11无法打开网页,一片空白,Internet选项灰色无法点击的问题
  9. 苹果迫不及待拥抱5G网络 已向FCC申请测试
  10. [408] NOTES on OS -计算机考研408笔记-操作系统