基于Android+MySQL的邮件检索

基于Android和MySQL的邮件检索

一、整体实现基本情况

1、 问题描述

通过Java和MySQL实现检索安然公司的51万封邮件。

2、 实验环境

IDE:IntelliJIDEA,AndroidStudio工具:MySQL,Navicat服务器:腾讯云

3、 实现简述

本次实验主要是在本地建好MySQL表,用Java程序读取51万封邮件并做相应切割后存入数据库中,然后购买了一台腾讯云服务器,在服务器上部署MySQL,使用工具Navicat将本地数据库部署上云。再在AndroidStudio上实现UI界面,并用客户端直连服务器数据库进行查询操作。

实现主要包含2个主要Java文件。

(1)【IDEA】SaveDataToMysql.java:读取所有文件并进行关键信息的切割,连接MySQL数据库,将路径(Path)、标题(Subject)、发件人(Author)、收件人(Addressee)、邮件内容(Content)存入MySQL中。将517401封邮件的信息全部存入MySQL中。

MySQL建表:

CREATE TABLE`Email`(

  `Path`	VARCHAR(500)NOTNULL,

  `Subject`	VARCHAR(500),

  `Author`	VARCHAR(500),

  `Addressee`	VARCHAR(500),

  `Content`	LONGTEXT,PRIMARYKEY(`Path`));

(2)【AndroidStudio】MainActivity.java:实现交互界面,用户输入检索类型和检索内容,有未输入的则报错。输入合法则连接服务器上的MySQL后进行检索,并将结果返回给用户。

4、 效果展示

二、【IDEA】SaveDataToMysql.java

1、 基本情况

包含3个步骤

(1)getFiles():获取所有邮件的绝对路径

(2)getData():遍历所有邮件,截取关键信息(标题、发件人、邮件内容)。

(3)InsertMysql():数据插入MySQL中。

2、 getFiles()

将path下所有文件的绝对路径保存在一个List中并返回。

3、 getData()

该函数遍历所有邮件,截取有用信息,存成一个DATA类的示例,最后返回一个List

4、 InsertMysql()

List中的数据插入MySQL中。

三、【Android】MainActivity.java

1、基本情况

主界面做用户的输入合法性判断,用户选择需要检索的类型(主题、寄件人、收件人、内容)和输入检索的内容后点击“确定”按钮。主线程启动子线程用于查询数据库,子线程连接腾讯云服务器上部署的MySQL数据库,并发送相应的SQL语句,服务器返回查询结果后,子线程通过Handler给UI界面传递信息,并在UI上将结果展示给用户。

2、Handler

全局Handler用户等待子线程的返回,子线程返回的msg.what=1是正常返回,msg.obj中存放着检索结果。调用ShowResult函数展示给用户。若返回的msg.what=2是不正常返回,调用Toast告知检索失败。

3、ShowResult()

在控件AlertDialog上展示子线程查询服务器上MySQL查询的结果。

4、SearchEmail()

对用户的输入和合法性进行判断,若用户输入不合法,则弹出toast进行提示;若用户输入均合法,则拼接SQL语句并启动子线程进行数据库查询。

5、DBconnection类与linkMysql()

类中的常量信息为数据库基本信息

主要函数linkMysql()的功能为连接数据库,然后执行SQL语句并获取查询结果,将结果(邮件的Path)存放在一个Vector中,然后通过sendMessage返回给Handler并告知执行成功。

四、遇到的问题

1、Java导入MySQL库参考:

IDEA连接数据库(导入jar包)_idea 连接数据库jar包-CSDN博客

2、MySQL中存储邮件内容时,一开始使用VARCHAR类型,后来发现有的邮件过长无法存储,改成TEXT,还是不行,后来改成LONGTEXT类型。

3、Javaheapspace:邮件太多,分2-3次录入MySQL。

4、AndroidStudio导入MySQL的jar不能导入太高的版本,原先导入IDEA的8以上版本根本运行不了,后来换成5的运行成功。

5、AndroidStudio中连接MySQL需要调用子线程,不能在主线程运行,涉及线程的同步互斥问题,采用了Handler的方式解决。一开始尝试忙等待发现不行,暂时还不知道为什么。

6、连接数据库时出现【Accessdeniedforuser'root'@服务器ip】的问题,应该权限出错,尝试解决未果,直接在服务器中修改配置文件,把MySQL的拦截关掉了,所有用户直接无密码登录,有风险,暂未解决。

五、改进方案

本实验直接让客户端APP操作后端数据库,实际应用中十分危险,应该在服务器中开发后台Java程序,让客户端和后台通过网络Socket编程进行交互,然后后端程序对客户端请求进行合法性判断,并操作MySQL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙别闹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值