Java 读取excel文件后将数据存储在mysql中

Java 读取excel文件后将数据存储在mysql中,java,mysql,jdbc,Java,Mysql,Jdbc,我正在尝试制作一个o程序,从excel文件中读取数据,并将其存储在数据库中。我使用eclipse作为编辑器和mySQL。我正在使用ApachePOI读取excel文件和JDBC进行连接。excel文件的结构如下所示: ID NAME SALARY STREET --- ---- ------ ------------- 321 TIM 1254 14 avenue 121 PAUL 1265 28h oktovriou 432 NI

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

ID    NAME   SALARY   STREET
---   ----   ------   -------------
321   TIM    1254     14 avenue
121   PAUL   1265     28h oktovriou
432   NICK   4521     papaflessa
我当然有很多这样的文件,其中包含更多的行和列。我的程序的目的是读取数据,创建以excel文件名命名的表,并将每个表的字段作为excel文件的第一行。之后,这些值将成为excel文件的其余数据。
在下面的代码中,我设法读取了它们,并在控制台中显示了数据。在WRDS之后,我试图用JDBC调用数据库,但在创建表时遇到了问题

try
            {
                String[] allFields;
                String createTableStr = "CREATE TABLE" + createTableStr
                   + "(" + org.apache.commons.lang3.StringUtils.join(allFields,
                   ",") + ")";
有人能帮我吗

先谢谢你!:)

import java.io.FileInputStream;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Iterator;
导入java.util.List;
导入org.apache.poi.hssf.usermodel.HSSFCell;
导入org.apache.poi.hssf.usermodel.HSSFRow;
导入org.apache.poi.hssf.usermodel.HSSFSheet;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.commons.lang3.StringUtils;
导入org.apache.poi.ss.usermodel.Cell;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.SQLException;
导入java.sql.Statement;
公开课考试1{
@SuppressWarnings({“未选中”、“未选中”})
静态void main(字符串[]args)引发异常{
String filename=“C:\\Users\\Efi\\Documents\\test5.xls”;
List sheetData=new ArrayList();
FileInputStream fis=null;
试一试{
fis=新文件输入流(文件名);
HSSF工作手册=新的HSSF工作手册(fis);
HSSFSheet sheet=工作簿。getSheetAt(0);
迭代器行=sheet.rowIterator();
while(rows.hasNext()){
HSSFRow行=(HSSFRow)行。下一步();
迭代器单元格=行。单元格迭代器();
列表数据=新的ArrayList();
while(cells.hasNext()){
HSSFCell单元格=(HSSFCell)单元格。下一步();
添加数据(单元格);
}
sheetData.add(数据);
}
}捕获(IOE异常){
e、 printStackTrace();
}最后{
如果(fis!=null){
fis.close();
}
}
showceldata(sheetData);
@抑制警告(“未使用”)
HashMap tableFields=新HashMap();

对于(int i=0;i您必须在此处获得编译错误:

            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
的实例。因此,当您尝试将其强制转换为
SQLException
时,它将生成一个
ClassCastException
.

“创建表时出现问题。”-问题是?告诉我们你得到了哪一个例外…没有,没有例外。只有在《编辑》中,它表明我有错误。我意识到这是你在这里的第一个问题,所以我认为你应该阅读关于你的问题应该如何表述的文章。理想情况下,我们不应该花时间寻找问题,也就是说,你说问题是什么,我们试图找出解决方法;)。我打赌你的编译器/编辑器正在告诉你哪里出了问题。无论如何,你正在创建并分配字符串createTableStr,而它本身还没有内容。此外,你正在连接一个新创建的字符串数组allFields,该数组将为空-但我相信你知道。你知道我将如何做吗?你必须阅读列从excel文件中提取umn名称,然后将其分配给字符串数组。考虑到表中最多有20列,请通过
allFields=new String[numberOfColumns];
对其进行初始化。然后使用
allFields[1]=“ID”初始化单个对象
等等。我想用编程的方式来做。我的意思是我将初始化它,但随后通过存储数据的数组列表来初始化每个字段。我将如何做?
       catch( Exception e )
        {
        System.out.println( ((SQLException) e).getSQLState() );
        System.out.println( e.getMessage() );
        e.printStackTrace();
        }