如何把word文档导入到数据库中——java POI

本文方法借鉴于https://www.cnblogs.com/ljysy/p/10574197.html

在经过朋友的指导下,在处理文档的方式上有所不同。

我的数据库使用的是SQL server,这篇博客将不介绍如何将数据存储进数据库中,只进行java POI处理文档数据的介绍,在处理完数据后,如果想要存储进不同的数据库的话,只需要更改数据的连接池以及存储代码即可。

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.util.HashMap;
 4 import java.util.List;
 5 import java.util.Map;
 6 
 7 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 8 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 9 
10 import Bean.Article;
11 import Dao.IDao;
12 import Dao.UserDaoImpl;
13 
14 public class WordToSql {
15 
16     public static String pian;
17     public static String zhang;
18     
19     public static void readAndWriter(String fileName)throws Exception {
20         File file = new File(fileName);
21         try {
22             FileInputStream fis = new FileInputStream(file);
23             XWPFDocument xdoc = new XWPFDocument(fis);
24             List<XWPFParagraph>paras = xdoc.getParagraphs();
25             Article article = new Article();
26             IDao userDao = new UserDaoImpl();
27             boolean isFirst = true;
28             for(XWPFParagraph p:paras) {  //遍历段落
29                 String level = p.getStyleID();
30                 System.out.println(level);
31                 if(level==null)continue;
32                 if(level.equals("12030")) {   //篇的字号是小三:15
33                     pian = p.getParagraphText();
34                     article.setPian(pian);
35                 }else if(level.equals("2201812")) {  //章的字号是四号:14
36                     if(!isFirst) {
37                         userDao.add(article);
38                         isFirst = true;
39                     }
40                     zhang = p.getParagraphText();
41                     article.setZhang(zhang);
42                 }else if(level.equals("3132020")) {   //每个热词的字号是13
43                     if(isFirst)isFirst = false;
44                     else userDao.add(article);
45                     String title = p.getParagraphText();
46                     article.setTitle(title);
47                     article.setContent(null);
48                 }else if(level.equals("41")) {  //段落的字号是小五:9
49                     String content = p.getParagraphText();
50                     if(article.getContent()!=null)content =article.getContent()+ content;
51                     article.setContent(content);
52                 }
53             }
54             fis.close();
55         }catch(Exception e) {
56             System.out.println("WordToSql:"+e.getMessage());
57         }
58     }
59     
60 }

在这一部分代码中,有一部分方法是POI的jar包自带的方法,如getParagraphs()和getStyleID()方法。

在博主推荐的那篇博客中,处理数据的方式也是根据字号进行,不过在博主使用后发现数据库中并没有导入数据,最后发现错误的原因是由于字号错误,于是在使用getStyleID()方法后,我将字号输出,最后发现这四种不同的字号。

isFirst的true和false将控制调用存储函数的时间点,可在仔细看过代码后,进行理解。

 

以下是存储函数的代码:

 1 import java.sql.Connection;
 2 import java.sql.PreparedStatement;
 3 
 4 import Bean.Article;
 5 import Util.DBUtil;
 6 
 7 public class UserDaoImpl implements IDao{
 8 
 9     public void add(Article article) {
10         Connection con = DBUtil.getConnection();
11         PreparedStatement pre = null;
12         String sql = "insert into data(pian,zhang,title,context) values(?,?,?,?)";
13         try {
14             pre = con.prepareStatement(sql);
15             pre.setString(1,article.getPian());
16             pre.setString(2,article.getZhang());
17             pre.setString(3,article.getTitle());
18             pre.setString(4,article.getContent());
19             pre.executeUpdate();
20             System.out.println("添加成功!");
21         }catch(Exception e) {
22             System.out.println(e.getMessage());
23         }finally {
24             DBUtil.close(pre);
25             DBUtil.close(con);
26         }
27     }
28     
29 }

以上就是全部内容,如果并不能理解博主的方法,可以看一看博主推荐的博客。

 

posted @ 2019-03-26 16:26  你说你好  阅读(3009)  评论(0编辑  收藏  举报