关于把excel的数据逐条读入到数据库中问题
关于把excel的数据逐条读入到数据库中问题
楼主muggle(旅鸥)2004-03-25 14:17:12 在 Java / J2EE / EJB / JMS 提问 大家帮我看看把 ,我想把excel的数据逐条读入到数据库中去,不过读的 时候是按列读的,比如先读出第一列字段的值,再读第二列。而写到数据库时,是按行写的,比如是一条纪录一条纪录读的。请问我怎么写这个循环啊?还有把excel单元格的值,保存到一个变量后,我怎么传递这个变量到insert语句中去了啊?很急啊,各位高手帮我看看把。
package myprojects.poiexample;
import javax.sql.*;
import java.io.IOException;
import java.io.*;
import org.apache.poi.poifs.filesystem.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRow;
import java.sql.*;
public class POIExample {
public static void main( String [] args ) {
try{
// 打开存在的EXCEL文件
POIFSFileSystem fs =
new POIFSFileSystem( new FileInputStream( "d:\\workbook.xls" ) );
HSSFWorkbook workbook = new HSSFWorkbook( fs );
// 得到sheet
HSSFSheet sheet = workbook.getSheetAt( 0 );
int allRec=sheet.getLastRowNum();
//System.out.println(+allRec+"");
for(int i=0;i<=allRec;i++)
{
String providerCode="";
String areaName="";
String province="";
String branch="";
String cityCode="";
String custName="";
String serviceName="";
String connPlace="";
String tariffType="";
int amount=0;
//String temp="";
HSSFRow row = sheet.getRow(i);
//out.print("row "+i+": ");
for(int j=0;j<=row.getLastCellNum()-3;j++)
{
switch(j)
{
case 0:
providerCode=row.getCell((short)j).getStringCellValue();
//temp=providerCode;
System.out.println(providerCode);
break;
case 1:
areaName=row.getCell((short)j).getStringCellValue();
//temp=areaName;
//System.out.println(areaName+"");
break;
case 2:
province=row.getCell((short)j).getStringCellValue();
//temp=province;
//System.out.println(province+"");
break;
case 3:
branch=row.getCell((short)j).getStringCellValue();
//temp=branch;
break;
case 4:
cityCode=row.getCell((short)j).getStringCellValue();
//temp=cityCode;
break;
case 5:
custName=row.getCell((short)j).getStringCellValue();
//temp=custName;
break;
case 6:
serviceName=row.getCell((short)j).getStringCellValue();
//temp=serviceName;
break;
case 7:
connPlace=row.getCell((short)j).getStringCellValue();
//temp=connPlace;
break;
case 8:
tariffType=row.getCell((short)j).getStringCellValue();
//temp=tariffType;
break;
case 9:
String cellStr1=Double.toString(row.getCell((short)j).getNumericCellValue());
Integer k=new Integer(cellStr1.substring(0,cellStr1.indexOf(".")));
amount=k.intValue();
//temp=k.toString()+"\n\r";
break;
}
//out.print(temp);
}
}
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@192.168.8.16:1521:oa";
String user="system";
String pass="chinasky";
Connection con=DriverManager.getConnection(url,user,pass);
Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
?????? //String sql="insert into scott.yyzx values(providerCode,areaName,province,branch,cityCode,custName,serviceName,connPlace,tariffType,amount)";
stmt.execute("insert into scott.yyzx values(providerCode)");
ResultSet rs=stmt.executeQuery("select * from scott.yyzx");
while(rs.next()) System.out.println("providerCode"+""+rs.getString(1));
rs.close();
stmt.close();
con.close();
} catch ( Exception e ) {
e.printStackTrace();
new POIExample();
}
}
}
问题点数:0、回复次数:7Top
1 楼bibiye(布什的老哥)回复于 2004-03-25 15:36:12 得分 0
我也正在做,
完成后与你共享。Top
2 楼leleli(侯鸟)回复于 2004-03-25 16:42:33 得分 0
推荐一个第三方的东东:
http://www.andykhan.com/jexcelapi/Top
3 楼bibiye(布什的老哥)回复于 2004-03-25 16:51:22 得分 0
我已经解决了
确实http://www.andykhan.com/jexcelapi/对中文支持较好
我也是用andykhan
给你个思路:
for(excel的行循环){
for(excel的列循环){
把记录赋给一个数组array
}
取出array,insert到对应的表里
}
Top
4 楼totodo(土豆仙)回复于 2004-03-25 18:24:44 得分 0
调式一下看看哪里出错了。Top
5 楼mbl(小马)回复于 2004-03-25 18:54:59 得分 0
upTop
6 楼muggle(旅鸥)回复于 2004-03-26 14:44:00 得分 0
今天调试了一下,解决了这个问题,不过又有新的问题了,我试验的excel表的记录是有规律的,一条一条的记录读是没有问题,不过的有的表的一些记录属于一个小系列,比如带?的一行,请问这个问题怎么解决啊。
18 马克思主义当代思潮与发展走向 杨 悦 讲 师
19 当代世界伦理思潮与中国的道德重建 郑 婷 助 教
20 政府公信力的建立 郑 婷 助 教
教研部: 科社 ??
21 从列宁的“政治遗嘱”到邓小平“政治交代 袁秉达 教 授
22 对苏联演变的历史追思——《莫斯科日记》 袁秉达 教 授
23 中国能崛起吗? 王耀东 副教授
Top
7 楼snail2004(蜗牛2004)回复于 2004-03-26 16:17:35 得分 0
to:muggle(旅鸥)
请先结贴,重新发贴问第二个问题!
请尊重他人的劳动!!!
Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
