# 基于Java和MySQL的邮件检索
## 一、整体实现基本情况
#### 1、 问题描述
通过Java和MySQL实现检索安然公司的51万封邮件。
#### 2、 实验环境
IDE:IntelliJIDEA
工具:MySQL
#### 3、 实现简述
主要包含2个Java文件。

(1)SaveDataToMysql.java:读取所有文件并进行关键信息的切割,连接MySQL数据库,将路径(Path)、标题(Subject)、发件人(Author)、收件人(Addressee)、邮件内容(Content)存入MySQL中。将517401封邮件的信息全部存入MySQL中。
MySQL建表:
```
CREATETABLE`Email`(
`Path` VARCHAR(500)NOTNULL,
`Subject` VARCHAR(500),
`Author` VARCHAR(500),
`Addressee` VARCHAR(500),
`Content` LONGTEXT,PRIMARYKEY(`Path`));
```
(2)SearchData.java:用户输入检索类型和检索内容,连接MySQL后进行检索,并将结果返回给用户。每次返回10条,通过翻页展示。
## 二、SaveDataToMysql.java
### 1、 基本情况
包含3个步骤
(1)getFiles():获取所有邮件的绝对路径
(2)getData():遍历所有邮件,截取关键信息(标题、发件人、邮件内容)。
(3)InsertMysql():数据插入MySQL中。


### 2、 getFiles()
将path下所有文件的绝对路径保存在一个List中并返回。

### 3、 getData()
该函数遍历所有邮件,截取有用信息,存成一个DATA类的示例,最后返回一个List<DATA>




### 4、 InsertMysql()
List<DATA>中的数据插入MySQL中。


## 三、SearchData.java
### 1、 程序效果演示
(1)用户输入检索类型,1为按标题检索,2为按发件人检索,3为按邮件正文检索,4为退出程序,其他输入提示输入错误,请求重新输入。

(2)用户输入检索内容,程序会展示搜索结果条数,并且10条为一页展示。当前处于第一页时,按n进入下一页;当前处于最后一页时,按l进入上一页;其他情况按n进入下一页,l进入上一页。所有情况下q退出(返回第1步),不符合条件的错误输入报错。



### 2、 基本情况
main函数中第一个while使得每次检索后程序不退出,进行一轮新的检索,直到用户选择退出,第二个while实现程序效果演示中的(1),引导用户选择检索类型。用户选择后引导用户输入检索信息。而后调用SearchMysqlInfo()函数检索,检索结果存放在一个Vector中。再通过ShowResult()函数展示检索结果。


### 3、 SearchMysqlInfo()
通过SQL的查找语句进行查找,查找结果存放在一个Vector中并返回,核心代码为:

函数完整代码为:


### 4、 ShowResult()
将结果分组展示,10条为一组,引导用户进行翻页查看结果。打印结果的函数为PrintPath(),需要注意不要溢出。



## 四、遇到的问题
1、Java导入MySQL库参考:
[https://blog.csdn.net/qq_38000422/article/details/79962314](https://blog.csdn.net/qq_38000422/article/details/79962314)
2、MySQL中存储邮件内容时,一开始使用VARCHAR类型,后来发现有的邮件过长无法存储,改成TEXT,还是不行,后来改成LONGTEXT类型。
3、Javaheapspace:邮件太多,分2-3次录入MySQL。