java中怎么把excel中的数据存储到数据库中

是这样的,最近在做一个批量导入功能、是把excel的数据导入到数据库中、我的步骤是这样的,先读取到excel的数据,然后存入数据库,接着读取数据库的数据、不知道这样的步骤... 是这样的,最近在做一个批量导入功能、是把excel的数据导入到数据库中、我的步骤是这样的,先读取到excel的数据,然后存入数据库,接着读取数据库的数据、不知道这样的步骤是否合理,另外我excel的数据已经读取到,如何存储到数据库中呢、我用的是sql server。java中用的是jxl技术、望高手能晒些代码出来,最好给我个例子、发我邮箱615293998@qq.com 有整个例子的接着加分。因为我困扰很久了,麻烦各位高手了、给我提供些例子和思想吧,我奔溃了都 展开
 我来答
grace23450
推荐于2016-09-14 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7081
采纳率:77%
帮助的人:2333万
展开全部

如果 Excel 文件在文件系统中,则输出 Agent 模块是主程序。它首先获取文件系统中的 Excel 文件,然后可以启动多个线程去处理一批 Excel 文件。获取 Excel 文件的类型和版本号,根据 Excel 类型和版本号去获取用以描述 Excel 和关系数据库的映射元数据,就是上节我们讲述的内容。进而解析元数据构建元数据的内存模型。并且采用缓存机制,同一种类型,并且是同一种版本的 Excel 文件应用内存中已经构建好的元数据模型来解析,不必每次都去重新获取元数据。这样可以显著的提高性能。

如果 Excel 文件是存放在 Domino 服务器上的,则需要一个 Domino Agent 程序主动调用输出 Agent 所提供的接口,批量的转换用解析程序从 domino 数据文档中解析出来的 excel 文件。(关于 Domino Agent 以及如何开发一个 Agent 程序,请见参考文献 2)

按照映射的元数据模型,应用 HSSF/XSSF 解析 Excel 的相应单元格、列,进而构造 SQL 语句(采用 JDBC 方式的模式)。在一个事务中提交该 Excel 文件所要执行的所有 SQL 语句, 保证一个 Excel 文件写入或者完全成功,或者出错回滚,并报告错误信息。如清单 2 所示。


//Insert into database
       List<String> sqlList = new ArrayList<String>();
       CADataStore  dataStore = new CADataStore();  
       if(tableSQLsMap!= null && tableSQLsMap.size()!= 0){
           Iterator<String> itsql = tableSQLsMap.keySet().iterator();
           while(itsql.hasNext()){
               String tableName = itsql.next();
               List<String> theList = tableSQLsMap.get(tableName);
               sqlList.addAll(theList);
           }
           dataStore.write(sqlList); // 一个事务中完成所有 sql 语句的插入操作,事务是以一个 excel
// 文件为单位的,可涉及到若干个表
       }
   }

Louis_cuti
2012-06-04 · 超过25用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:77.3万
展开全部
既然数据已经取到了,数据库用的是sql server,B/S的话为什么不考虑使用hibernate呢?映射以后,编写dao层代码,就可以直接保存进数据库了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
niddy2012
2012-06-04
知道答主
回答量:42
采纳率:0%
帮助的人:21.7万
展开全部
用POI库进行解析,然后保存。具体例子,查POI就有一堆
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhoulianglg
2012-06-04 · TA获得超过268个赞
知道小有建树答主
回答量:362
采纳率:0%
帮助的人:185万
展开全部
直接解析,然后循环插入
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fff3ffc
2012-06-04 · TA获得超过574个赞
知道小有建树答主
回答量:253
采纳率:100%
帮助的人:117万
展开全部
我刚在做 给你点看看 导入导出两个方法。
public static void exportData(Vector<String> heads,Vector<Vector<Object>> datas,String sheetName) {
//配置JFileChooser
JFileChooser chooser=new JFileChooser("."){
public void approveSelection(){
if(this.getSelectedFile().exists()){
int flag=JOptionPane.showConfirmDialog(null, "文件已经存在,是否覆盖","保存",JOptionPane.YES_NO_OPTION);
if(flag==JOptionPane.YES_OPTION){
super.approveSelection();
}
}else
super.approveSelection();
}
};
String fileName="datas"+".xls";
chooser.setSelectedFile(new File(fileName));
chooser.setAcceptAllFileFilterUsed(false);
chooser.setFileFilter(new FileFilter(){
public boolean accept(File f) {
if(f.isDirectory()||f.getName().endsWith(".xls"))
return true;
return false;
}
public String getDescription() {
return "Excel文件(.xls)";
}
});
//与excel交互
int flag=chooser.showSaveDialog(null);
if(flag==JFileChooser.APPROVE_OPTION){
jxl.Workbook wb=null;
jxl.write.WritableWorkbook wwb=null;
jxl.write.WritableSheet ws=null;
File file=chooser.getSelectedFile();
try {
if(file.exists()){
try {
wb=Workbook.getWorkbook(file);//文件存在则副本
wwb=jxl.Workbook.createWorkbook(file,wb);
} catch (BiffException e1) {
JOptionPane.showMessageDialog(null,"请先关闭该文件!");
return;
} catch (IOException e1) {
JOptionPane.showMessageDialog(null,"请先关闭该文件!");
return;
}
}else{
wwb=jxl.Workbook.createWorkbook(file);//文件不存在则新增
}
if(wwb.getSheet(sheetName)==null){
ws=wwb.createSheet(sheetName,0);//sheetName不存在则新增到0
}else{
ws=wwb.getSheet(sheetName);//sheetName存在则获取该页并清空数据
for(int row=1;row<ws.getRows();row++){
ws.removeRow(row);
}
}
for(int col=0;col<heads.size();col++){//加入表头
jxl.write.Label label=new jxl.write.Label(col,0,heads.get(col));
ws.addCell(label);
}
for(int row=0;row<datas.size();row++){//加入数据
for(int col=0;col<datas.get(row).size();col++){
if(datas.get(row).get(col).getClass()==String.class){
jxl.write.Label cell=new jxl.write.Label(col,row+1, datas.get(row).get(col).toString());
ws.addCell(cell);
}
if(datas.get(row).get(col).getClass()==BigDecimal.class){
jxl.write.Number cell=new jxl.write.Number(col,row+1, ((BigDecimal)datas.get(row).get(col)).doubleValue());
ws.addCell(cell);
}
if(datas.get(row).get(col).getClass()==BigInteger.class){
jxl.write.Number cell=new jxl.write.Number(col,row+1, ((BigInteger)datas.get(row).get(col)).doubleValue());
ws.addCell(cell);
}
if(datas.get(row).get(col).getClass()==Long.class){
jxl.write.Number cell=new jxl.write.Number(col,row+1, ((Long)datas.get(row).get(col)).doubleValue());
ws.addCell(cell);
}
if(datas.get(row).get(col).getClass()==Integer.class){
jxl.write.Number cell=new jxl.write.Number(col,row+1, ((Integer)datas.get(row).get(col)).doubleValue());
ws.addCell(cell);
}
if(datas.get(row).get(col).getClass()==Float.class){
jxl.write.Number cell=new jxl.write.Number(col,row+1, ((Float)datas.get(row).get(col)).doubleValue());
ws.addCell(cell);
}
if(datas.get(row).get(col).getClass()==Double.class){
jxl.write.Number cell=new jxl.write.Number(col,row+1, ((Double)datas.get(row).get(col)).doubleValue());
ws.addCell(cell);
}
}
}

} catch (Exception e) {
e.printStackTrace();
}finally{
try {
wwb.write();
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}

}
}
}
更多追问追答
追问
能不能把文件发我,就这个项目整个发我、这么看还是挺模糊的
追答
自己看看JXL的介绍吧  内容没多少的  花一个下午就够了   就是WorkBook   WritableWorkBook   Sheet   writablesheet    cell   cellforamt  celltype   没多少东西的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式