如何用java POI將word中的內容導入到mysql數據庫中


 

由於作業需要,要求我們將word文檔中的數據直接導入到mysql中,在網上找了很常時間,終於將其解決。

由於比較初級,所以處理的word文檔是那種比較規范的那種,條例比較清晰,設計的思路也比較簡單,就是根據段落的內容判斷每一段是標題還是內容,然后讀完一條記錄后直接像數據庫中添加,知道最后都添加完成。代碼如下:

本項目的結構如截圖所示:

其中Bean.java里邊是一個實體類,我將每一個新聞熱詞的標題,內容,分類都封裝在一個類中,Dao.java是實現向數據庫中插入數據的函數,DBUtil.java是鏈接數據庫,WordToSql.java里邊是具體的實現代碼,test.java是一個測試類。

 

注:本人用的maven項目,需要導入一下依賴:

 <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi-ooxml</artifactId> 
      <version>3.8</version>
    </dependency> 
    <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi-scratchpad</artifactId> 
      <version>3.8</version> 
    </dependency>

    

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>

 Bean.java

package com.chry.WordToSql;

public class Bean {
    public String pian;
    public String zhang;
    public String title;
    public String content;
    public Bean(String pian, String zhang, String title, String content) {
        super();
        this.pian = pian;
        this.zhang = zhang;
        this.title = title;
        this.content = content;
    }
    public String getPian() {
        return pian;
    }
    public String getZhang() {
        return zhang;
    }
    public String getTitle() {
        return title;
    }
    public String getContent() {
        return content;
    }
    public void setPian(String pian) {
        this.pian = pian;
    }
    public void setZhang(String zhang) {
        this.zhang = zhang;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public void setContent(String content) {
        this.content = content;
    }

    public Bean() {
        
    }
    @Override
    public String toString() {
        return "Bean [pian=" + pian + ", zhang=" + zhang + ", title=" + title + ", content=" + content + "]";
    }
}

 

Dao.java

 

package com.chry.WordToSql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Dao {

    public void add(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

package com.chry.WordToSql;



import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


public class DBUtil {
public static Connection 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();
}
return connection;
 
}

public static void close(Connection connection)
{
 try {
     if(connection!=null)
     {
         connection.close();
     }
    
} catch (SQLException e) {
    // TODO �Զ����ɵ� catch ��
    e.printStackTrace();
}
 
}
public static void close(PreparedStatement preparedStatement)
{
 try {
     if(preparedStatement!=null)
     {
         preparedStatement.close();
     }
    
} catch (SQLException e) {
    // TODO �Զ����ɵ� catch ��
    e.printStackTrace();
}
 
}

public static void close(ResultSet resultSet)
{
 try {
     if(resultSet!=null)
     {
         resultSet.close();
     }
    
} catch (SQLException e) {
    // TODO �Զ����ɵ� catch ��
    e.printStackTrace();
}
 
}

}

注:鏈接數據庫的用戶名,密碼,還有數據庫的名稱都要根據的情況進行修改。

 

WordToSql.java

package com.chry.WordToSql;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;

import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;

public class WordToSql {

    public static String pian;
    public static String zhang;
    
    public static void readAndWriterTest4() throws IOException { 
        File file = new File("D:\\2.docx"); 
        String str = "";
        try { 
            FileInputStream fis = new FileInputStream(file); 
            XWPFDocument xdoc = new XWPFDocument(fis);
            List<XWPFParagraph> paras=xdoc.getParagraphs();
            Bean bean = new Bean();
            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 = new Dao();
                        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) throws IOException { readAndWriterTest4(); } }

至此,便可以將一片word文檔完整的導入數據庫中,后續會進一步研究如何將更加復雜的word文檔導入數據庫中。

注:在word文檔中,每個人的字號的級別都不太一樣,所以可以先寫一個測試函數,輸出每個段落的字號,再去修改正式導入數據庫中的代碼,本博客是經過修正之后的。

如有問題,請留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM