【问题标题】:Insert Excel Data to database将 Excel 数据插入数据库
【发布时间】:2014-08-08 07:57:21
【问题描述】:

我想通过 java 程序将 excel 工作表数据插入数据库,但我没有得到实际输出。 excel表不包含他们在行中给出的标题 我需要获取每一行并将其作为插入脚本。

数据应该直接插入到数据库中

  client                   page                AcessDate           ProcessTime  bytes
12.34.56.9876545    hello.jsp           6/3/2014 5:52:16 PM 3        123
12.34.56.9876545    SignOut.jsp         6/3/2014 6:21:16 PM 0   1724
12.34.56.9876545    Login.jsp           6/3/2014 6:21:16 PM 0   4937

我应该得到输出

insert into ClickStream(Client,Page,AccessDate,ProcessTime,Bytes)
value('"+12.34.56.9876545   +"','"+hello.jsp+"','"+ 6/3/2014 5:52:16 PM+"','"+3+"','"+1724+"'"

我正在使用我没有得到的代码,看看我的代码是否工作我无法获得正确的输出

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Iterator;
import java.util.Vector;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

  public class InsertExcelFileData {
  public static void main( String [] args ) {
    String fileName="F:\\book.xlsx";
    Vector dataHolder=read(fileName);
    saveToDatabase(dataHolder);
}
    public static Vector read(String fileName)    {
    Vector cellVectorHolder = new Vector();
    try{
            FileInputStream myInput = new FileInputStream(fileName);
            //POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
        XSSFWorkbook myWorkBook = new XSSFWorkbook(myInput);
        XSSFSheet mySheet = myWorkBook.getSheetAt(0);
       Iterator rowIter = mySheet.rowIterator(); 
       while(rowIter.hasNext()){
              XSSFRow myRow = (XSSFRow) rowIter.next();
              Iterator cellIter = myRow.cellIterator();
              Vector cellStoreVector=new Vector();
              while(cellIter.hasNext()){
                      XSSFCell myCell = (XSSFCell) cellIter.next();
                      cellStoreVector.addElement(myCell);
              }
              cellVectorHolder.addElement(cellStoreVector);
      }
    }catch (Exception e){e.printStackTrace(); }
    return cellVectorHolder;
}
    private static void saveToDatabase(Vector dataHolder) {
    String Client="";
            String Page="";
              String AccessDate="";
              String   ProcessTime="";
              String Bytes="";
            for (int i=0;i<dataHolder.size(); i++){
               Vector cellStoreVector=(Vector)dataHolder.elementAt(i);
                    for (int j=0; j < cellStoreVector.size();j++){
                            XSSFCell myCell = (XSSFCell)cellStoreVector.elementAt(j);
                            String st = myCell.toString();
                            Client=st;
                            Page=st.substring(0);
                            System.out.print(st);
                                        }
                    try{
Class.forName("com.jnetdirect.jsql.JSQLDriver").newInstance();
Connection con = DriverManager.getConnection("jdbc:JSQLConnect://12.33.44.55/database=Environment", "root", "root");
    Statement stat=con.createStatement();
    int k=stat.executeUpdate("insert into ClickStream(Client,Page,AccessDate,ProcessTime,Bytes) value('"+Client+"','"+Page+"','"+AccessDate+"','"+ProcessTime+"','"+Bytes+"'");
    System.err.print(k);

    System.out.println("Data is inserted");
    stat.close();
    con.close();
    }
    catch(Exception e){}
    }
    }
  }

请帮助使代码正常工作

【问题讨论】:

  • 首先,永远不要这样做:catch(Exception e){} 异常可能仍然发生,并且(部分)您的程序可能仍然崩溃,您永远不会知道它。至少,打印堆栈跟踪或将其写入日志文件。
  • 所以,如果我没记错的话,你会得到除了“client - page - accessDate - ...”这一行之外的所有内容?
  • 是的,我将所有值作为字符串获取。但我需要单独获取值
  • 与客户价值到客户和页面价值到页面一样
  • 输出为 ClientPageAccessDateProcessTimeBytes12.34.56.9876545hello.jsp 6/3/2014 5:52:16 PM 3123

标签: java database excel oracle


【解决方案1】:

实际上,您的迭代几乎没有问题。希望这段代码对你有所帮助

import java.io.FileInputStream;
import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelToDb {
    public static void main( String [] args ) {
        String fileName="G:\\book.xlsx";
        Vector dataHolder=read(fileName);
        saveToDatabase(dataHolder);
    }
    public static Vector read(String fileName)    {
        Vector cellVectorHolder = new Vector();
        try{
            FileInputStream myInput = new FileInputStream(fileName);
            //POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
            XSSFWorkbook myWorkBook = new XSSFWorkbook(myInput);
            XSSFSheet mySheet = myWorkBook.getSheetAt(0);
            Iterator rowIter = mySheet.rowIterator();
            while(rowIter.hasNext()){
                XSSFRow myRow = (XSSFRow) rowIter.next();
                Iterator cellIter = myRow.cellIterator();
                //Vector cellStoreVector=new Vector();
                List list = new ArrayList();
                while(cellIter.hasNext()){
                    XSSFCell myCell = (XSSFCell) cellIter.next();
                    list.add(myCell);
                }
                cellVectorHolder.addElement(list);
            }
        }catch (Exception e){e.printStackTrace(); }
        return cellVectorHolder;
    }
    private static void saveToDatabase(Vector dataHolder) {
        String ClientAdd="";
        String Page="";
        String AccessDate="";
        String   ProcessTime="";
        String Bytes="";
        System.out.println(dataHolder);

        for(Iterator iterator = dataHolder.iterator();iterator.hasNext();) {
            List list = (List) iterator.next();
            ClientAdd = list.get(0).toString();
            Page = list.get(1).toString();
            AccessDate = list.get(2).toString();
            ProcessTime = list.get(3).toString();

            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "welcome");
                System.out.println("connection made...");
                PreparedStatement stmt=con.prepareStatement("INSERT INTO ClickStream(ClientAdd,Page,AccessDate,ProcessTime) VALUES(?,?,?,?)");
                stmt.setString(1, ClientAdd);
                stmt.setString(2, Page);
                stmt.setString(3, AccessDate);
                stmt.setString(4, ProcessTime);
                stmt.executeUpdate();

                System.out.println("Data is inserted");
                stmt.close();
                con.close();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }



        }
    }

【讨论】:

    【解决方案2】:

    为什么不将excel文件导出为csv文件,然后用它加载到db中?

    【讨论】:

    • 但我得到的结果相同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多