Java 读取excel文件后将数据存储在mysql中
我正在尝试制作一个o程序,从excel文件中读取数据,并将其存储在数据库中。我使用eclipse作为编辑器和mySQL。我正在使用ApachePOI读取excel文件和JDBC进行连接。excel文件的结构如下所示: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
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();
}