Java 将excel代码写入数据库
我正在尝试读取excel文件,然后将excel的内容写入数据库。我能够阅读excel,如果打印,它会显示在输出下面。 我想知道如何将这些数据分离或拆分为数据库中的列,并将数据存储在数据库中。我有一个DB表格,如果我分成列,它可以保存下面的数据。Java 将excel代码写入数据库,java,servlets,Java,Servlets,我正在尝试读取excel文件,然后将excel的内容写入数据库。我能够阅读excel,如果打印,它会显示在输出下面。 我想知道如何将这些数据分离或拆分为数据库中的列,并将数据存储在数据库中。我有一个DB表格,如果我分成列,它可以保存下面的数据。 //CODE OUTPUT 1.0 Henry Rey Staff IT Software Engg New Hire TigoAdmin 11-Oct-2012
//CODE OUTPUT
1.0 Henry Rey Staff IT Software Engg New Hire TigoAdmin 11-Oct-2012 11-Oct-2012 555.0
2.0 Nick Murry Staff IT Administrator New Hire TigoAdmin 11-Oct-2012 11-Oct-2012 555.0
// BELOW is the CODE
package com.project.bulk;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.Vector;
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.poi.poifs.filesystem.POIFSFileSystem;
public class ReadExcelFile {
public static void main(String[] args) {
String fileName = "C:\\excelFile.xls";
Vector dataHolder = ReadCSV(fileName);
printCellDataToConsole(dataHolder);
}
public static Vector ReadCSV(String fileName) {
Vector cellVectorHolder = new Vector();
try {
FileInputStream myInput = new FileInputStream(fileName);
POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);
HSSFSheet mySheet = myWorkBook.getSheetAt(0);
Iterator rowIter = mySheet.rowIterator();
while (rowIter.hasNext()) {
HSSFRow myRow = (HSSFRow) rowIter.next();
Iterator cellIter = myRow.cellIterator();
Vector cellStoreVector = new Vector();
while (cellIter.hasNext()) {
HSSFCell myCell = (HSSFCell) cellIter.next();
cellStoreVector.addElement(myCell);
}
cellVectorHolder.addElement(cellStoreVector);
}
} catch (Exception e) {
e.printStackTrace();
}
return cellVectorHolder;
}
private static void printCellDataToConsole(Vector dataHolder) {
for (int i = 0; i < dataHolder.size(); i++) {
Vector cellStoreVector = (Vector) dataHolder.elementAt(i);
for (int j = 0; j < cellStoreVector.size(); j++) {
HSSFCell myCell = (HSSFCell) cellStoreVector.elementAt(j);
String stringCellValue = myCell.toString();
System.out.print(stringCellValue + "\t\t");
}
System.out.println();
}
}
}
//代码输出
1.0 Henry Rey员工IT软件工程师新员工TigoAdmin 2012年10月11日2012年10月11日555.0
2.0 Nick Murry员工IT管理员新聘TigoAdmin 2012年10月11日2012年10月11日555.0
//下面是代码
包com.project.bulk;
导入java.io.FileInputStream;
导入java.util.Iterator;
导入java.util.Vector;
导入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.poi.poifs.filesystem.poifsfsystem;
公共类ReadExcelFile{
公共静态void main(字符串[]args){
String fileName=“C:\\excelFile.xls”;
矢量数据保持器=ReadCSV(文件名);
printCellDataToConsole(数据持有者);
}
公共静态向量ReadCSV(字符串文件名){
Vector cellVectorHolder=新向量();
试一试{
FileInputStream myInput=新的FileInputStream(文件名);
POIFSFileSystem myFileSystem=新的POIFSFileSystem(myInput);
HSSFWorkbook myWorkBook=新的HSSFWorkbook(myFileSystem);
HSSFSheet mySheet=myWorkBook.getSheetAt(0);
迭代器rowIter=mySheet.rowitter();
while(rowIter.hasNext()){
HSSFRow myRow=(HSSFRow)rowIter.next();
迭代器cellIter=myRow.cellIterator();
Vector cellStoreVector=新向量();
while(cellIter.hasNext()){
HSSFCell myCell=(HSSFCell)cellIter.next();
cellStoreVector.addElement(菌丝体);
}
cellVectorHolder.addElement(cellStoreVector);
}
}捕获(例外e){
e、 printStackTrace();
}
返回细胞载体;
}
私有静态void printCellDataToConsole(向量数据持有者){
对于(int i=0;i
如果不知道要向语句发送多少个参数,可以创建一个方法来处理它。我将给你一个非常基本的例子,记住这种方法可以大大改进
public void executeSQLUpdate(String sql, List<Object> arguments) {
Connection con = null;
PreparedStatement pstmt = null;
try {
con = getConnection(); //a method that returns a java.sql.Connection to your database
pstmt = con.prepareStatement(sql);
if (arguments != null) {
int i = 1;
for(Object o : arguments) {
pstmt.setObject(i++, o);
}
}
//method to execute insert, update, delete statements...
pstmt.executeUpdate();
} catch(SQLException e) {
//handle the error...
} finally {
//closing the resources (always in finally block, not in the try!)
try {
if (pstmt != null) {
pstmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
}
}
}
//calling the method to execute a sql insert statement
public void yourMethodToData(List<Object> arguments) {
String sql = "INSERT INTO YOUR TABLE VALUES(?)";
executeSQLUpdate(sql, arguments);
}
public void executeSQLUpdate(字符串sql,列表参数){
连接con=null;
PreparedStatement pstmt=null;
试一试{
con=getConnection();//返回到数据库的java.sql.Connection的方法
pstmt=con.preparest陈述(sql);
if(参数!=null){
int i=1;
for(对象o:参数){
setObject(i++,o);
}
}
//方法来执行insert、update、delete语句。。。
pstmt.executeUpdate();
}捕获(SQLE异常){
//处理错误。。。
}最后{
//关闭资源(始终在finally块中,而不是在try中!)
试一试{
如果(pstmt!=null){
pstmt.close();
}
如果(con!=null){
con.close();
}
}捕获(SQLE异常){
}
}
}
//调用该方法以执行sql insert语句
public void yourMethodToData(列出参数){
String sql=“插入表值(?”;
executeSQLUpdate(sql、参数);
}
Vector
类实现了List
接口,因此您可以通过这些方法传递Vector
作为旁注,不应使用
向量
,而应使用由数组列表
实现的列表
。更多信息:您需要学习如何使用String.split()
方法和JDBC API与您的数据库通信。@code Guru这有助于在数据库中插入数据吗?因为您有一个向量,其中包含Excel文件中的数据,您只需要JDBC语句就可以在表中插入数据了。@LuiggiMendoza:这正是我现在遇到的问题。你能写一个示例代码如何将矢量数据发送到DB吗?