由于作业需要,要求我们将word文档中的数据直接导入到mysql中,在网上找了很常时间,终于将其解决。
由于比较初级,所以处理的word文档是那种比较规范的那种,条例比较清晰,设计的思路也比较简单,就是根据段落的内容判断每一段是标题还是内容,然后读完一条记录后直接像数据库中添加,知道最后都添加完成。代码如下:
本项目的结构如截图所示:
其中Bean.java里边是一个实体类,我将每一个新闻热词的标题,内容,分类都封装在一个类中,Dao.java是实现向数据库中插入数据的函数,DBUtil.java是链接数据库,WordToSql.java里边是具体的实现代码,test.java是一个测试类。
注:本人用的maven项目,需要导入一下依赖:
org.apache.poi
poi-ooxml
3.8
org.apache.poi
poi-scratchpad
3.8
mysql
mysql-connector-java
5.1.38
Bean.java
packagecom.chry.WordToSql;public classBean {publicString pian;publicString zhang;publicString title;publicString content;publicBean(String pian, String zhang, String title, String content) {super();this.pian =pian;this.zhang =zhang;this.title =title;this.content =content;
}publicString getPian() {returnpian;
}publicString getZhang() {returnzhang;
}publicString getTitle() {returntitle;
}publicString getContent() {returncontent;
}public voidsetPian(String pian) {this.pian =pian;
}public voidsetZhang(String zhang) {this.zhang =zhang;
}public voidsetTitle(String title) {this.title =title;
}public voidsetContent(String content) {this.content =content;
}publicBean() {
}
@OverridepublicString toString() {return "Bean [pian=" + pian + ", zhang=" + zhang + ", title=" + title + ", content=" + content + "]";
}
}
Dao.java
packagecom.chry.WordToSql;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;public classDao {public voidadd(Bean bean) {
Connection connection=DBUtil.getConnection();
PreparedStatement preparedStatement= null;
String sql= "insert into data (pian,zhang,title,content) value (?,?,?,?)";try{
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(1, bean.getPian());
preparedStatement.setString(2, bean.getZhang());
preparedStatement.setString(3, bean.getTitle());
preparedStatement.setString(4, bean.getContent());
preparedStatement.executeUpdate();
System.out.println("插入成功");
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.close(preparedStatement);
DBUtil.close(connection);
}
}
}
DBUtil.java
packagecom.chry.WordToSql;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;public classDBUtil {public staticConnection getConnection(){try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
}catch(InstantiationException e) {//TODO �Զ����ɵ� catch ��
e.printStackTrace();
}catch(IllegalAccessException e) {//TODO �Զ����ɵ� catch ��
e.printStackTrace();
}catch(ClassNotFoundException e) {//TODO �Զ����ɵ� catch ��
e.printStackTrace();
}
String user="root";
String password="root";
String url="jdbc:mysql://localhost:3306/bigdata";
Connection connection=null;try{
connection=DriverManager.getConnection(url, user, password);
}catch(SQLException e) {//TODO �Զ����ɵ� catch ��
e.printStackTrace();
}returnconnection;
}public static voidclose(Connection connection)
{try{if(connection!=null)
{
connection.close();
}
}catch(SQLException e) {//TODO �Զ����ɵ� catch ��
e.printStackTrace();
}
}public static voidclose(PreparedStatement preparedStatement)
{try{if(preparedStatement!=null)
{
preparedStatement.close();
}
}catch(SQLException e) {//TODO �Զ����ɵ� catch ��
e.printStackTrace();
}
}public static voidclose(ResultSet resultSet)
{try{if(resultSet!=null)
{
resultSet.close();
}
}catch(SQLException e) {//TODO �Զ����ɵ� catch ��
e.printStackTrace();
}
}
}
注:链接数据库的用户名,密码,还有数据库的名称都要根据的情况进行修改。
WordToSql.java
packagecom.chry.WordToSql;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.List;importorg.apache.poi.xwpf.extractor.XWPFWordExtractor;importorg.apache.poi.xwpf.usermodel.XWPFDocument;importorg.apache.poi.xwpf.usermodel.XWPFParagraph;public classWordToSql {public staticString pian;public staticString zhang;public static void readAndWriterTest4() throwsIOException {
File file= new File("D:\2.docx");
String str= "";try{
FileInputStream fis= newFileInputStream(file);
XWPFDocument xdoc= newXWPFDocument(fis);
List paras=xdoc.getParagraphs();
Bean bean= newBean();for(XWPFParagraph p : paras)//遍历段落
{//获取段落的级别
String jibie =p.getStyleID();if(jibie!=null) {if(jibie.equals("8")) {
pian=p.getParagraphText();
bean.setPian(pian);
}else if(jibie.equals("9")) {
zhang=p.getParagraphText();
bean.setZhang(zhang);
}else if(jibie.equals("10")){ //判断的段落为标题//System.out.println(bean.toString());//写入数据库
Dao dao = newDao();
dao.add(bean);
bean.setContent("");
String title=p.getParagraphText();
bean.setTitle(title);
}else { //判断段落为正文
String content =p.getParagraphText();if(bean.getContent()!=null) {
content= content +bean.getContent();
}
bean.setContent(content);
}
}
}
fis.close();
}catch(Exception e) {
e.printStackTrace();
}
}public static void main(String[] args) throwsIOException {
readAndWriterTest4();
}
}
至此,便可以将一片word文档完整的导入数据库中,后续会进一步研究如何将更加复杂的word文档导入数据库中。
注:在word文档中,每个人的字号的级别都不太一样,所以可以先写一个测试函数,输出每个段落的字号,再去修改正式导入数据库中的代码,本博客是经过修正之后的。
如有问题,请留言。