0

我正在尝试制作一个程序,我将从excel文件中读取数据并将它们存储在数据库中。我使用 eclipse 作为编辑器和 mySQL。我正在使用 APACHE POI 读取 excel 文件和 JDBC 进行连接。excel文件的结构如下图所示:

ID    NAME   SALARY   STREET
---   ----   ------   -------------
321   TIM    1254     14 avenue
121   PAUL   1265     28h oktovriou
432   NICK   4521     papaflessa

我当然有很多这样的文件,其中包含更多的行和列。我的程序的目的是读取数据,创建名为 excel 文件名称的表,并将每个表的字段作为 excel 文件的第一行。之后这些值将是 excel 文件的其余数据。在下面的代码中,我设法阅读了它们,在控制台中显示数据。Afterwrds 我尝试使用 JDBC 调用数据库,但是在创建表时出现问题。

try
            {
                String[] allFields;
                String createTableStr = "CREATE TABLE" + createTableStr
                   + "(" + org.apache.commons.lang3.StringUtils.join(allFields,
                   ",") + ")";

有人可以帮我吗?

先感谢您!:)

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Cell;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class exam1 {

    @SuppressWarnings({ "unchecked", "unchecked" })
    static void main (String[] args) throws Exception {

        String filename = "C:\\Users\\Efi\\Documents\\test5.xls";

        List sheetData = new ArrayList();
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(filename);
            HSSFWorkbook workbook = new HSSFWorkbook(fis);
            HSSFSheet sheet = workbook.getSheetAt(0);

            Iterator rows = sheet.rowIterator();
            while (rows.hasNext()) {
                HSSFRow row = (HSSFRow) rows.next();
                Iterator cells = row.cellIterator();

                List data = new ArrayList();
                   while (cells.hasNext()) {
                   HSSFCell cell = (HSSFCell) cells.next();
                   data.add(cell);
                   }
                   sheetData.add(data);
            }

                   } catch (IOException e) {
                   e.printStackTrace();
                   } finally {
                   if (fis != null) {
                   fis.close();
                   }
                   }

    showExcelData(sheetData);


    @SuppressWarnings("unused")
    HashMap<String, String> tableFields = new HashMap();
          for (int i=0; i<sheetData.size();i++){
          List list = (List) sheetData.get(i);
              for (int j=0; j<list.size(); j++){
                Cell cell = (Cell) list.get(j);
                 if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                System.out.print(cell.getNumericCellValue());

                  }else if(cell.getCellType()==Cell.CELL_TYPE_STRING) {


                  System.out.print(cell.getRichStringCellValue());
              } else if(cell.getCellType()==Cell.CELL_TYPE_BOOLEAN) {
            System.out.print(cell.getBooleanCellValue());
                    }
                if (j < list.size() - 1) {
            System.out.print(", ");
                    }}}
                    }

    private static void showExcelData(List sheetData) {

        }

    @SuppressWarnings("unchecked")
    private HashMap parseExcelData (List sheetData){

            HashMap<String,Integer> tableFields = new HashMap();
            List list = (List) sheetData.get(0);
            for (int j=0; j<list.size(); j++){
                Cell cell=(Cell) list.get(j);
                tableFields.put(cell.getStringCellValue(),cell.getCellType());
        }

            return tableFields;

        }



    @SuppressWarnings({ "unchecked", "unchecked", "unchecked", "unchecked", "unused" })
    private String getCreateTable(String tablename, HashMap<String, Integer> tableFields){
        Iterator iter = tableFields.keySet().iterator();
        String str="";
        String[] allFields = new String[tableFields.size()];
        int i = 0;
        while (iter.hasNext()){
        String fieldName = (String) iter.next();
        Integer fieldType=(Integer)tableFields.get(fieldName);

        switch (fieldType){
        case Cell.CELL_TYPE_NUMERIC:
        str=fieldName + "INTEGER";
        break;
        case Cell.CELL_TYPE_STRING:
        str= fieldName + "VARCHAR(255)";
        break;
        case Cell.CELL_TYPE_BOOLEAN:
        str=fieldName + "INTEGER";
        break;
            }
        allFields[i++]= str;
        }
        return str; 
    }

    public Connection getConnection() throws SQLException {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/kainourgia","root", "root");
            Statement  stmt = con.createStatement();
            try
            {
            System.out.println( "Use the database..." );
            stmt.executeUpdate( "USE kainourgia;" );
            }
            catch( SQLException e )
            {
            System.out.println( "SQLException: " + e.getMessage() );
            System.out.println( "SQLState:     " + e.getSQLState() );
            System.out.println( "VendorError:  " + e.getErrorCode() );
            }
            try
            {
                String[] allFields;
                String createTableStr = "CREATE TABLE" + createTableStr
                   + "(" + org.apache.commons.lang3.StringUtils.join(allFields,
                   ",") + ")";

                System.out.println( "Create a new table in the database" );
                stmt.executeUpdate( createTableStr );
                }
            catch( SQLException e )
            {
            System.out.println( "SQLException: " + e.getMessage() );
            System.out.println( "SQLState:     " + e.getSQLState() );
            System.out.println( "VendorError:  " + e.getErrorCode() );
            }
            }
            catch( Exception e )
            {
            System.out.println( ((SQLException) e).getSQLState() );
            System.out.println( e.getMessage() );
            e.printStackTrace();
            }
        return null;
            }

        }
4

1 回答 1

0

您一定会在这里遇到编译错误:

            String[] allFields;
            String createTableStr = "CREATE TABLE" + createTableStr
               + "(" + org.apache.commons.lang3.StringUtils.join(allFields,
               ",") + ")";

您收到此错误是因为您在allFields未初始化的情况下使用了它。如果不先初始化,就不能使用局部引用变量。先初始化,再使用。此外,您应该使用从 Excel 文件中读取的列名值对其进行初始化,以便正确创建表。

另外,我看到您将 e 投射到SQLException此处:

       catch( Exception e )
        {
        System.out.println( ((SQLException) e).getSQLState() );
        System.out.println( e.getMessage() );
        e.printStackTrace();
        }

您不应该这样做,因为如果 e 是 的实例SQLException,它将被第一个 catch 块捕获。它已到达第二个 catch 块,表明它不是SQLException. 因此,ClassCastException当您尝试将其转换为SQLException.

于 2013-04-17T13:33:28.220 回答