开发者社区> 沉默术士> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

如何用Java将excel数据导入数据库

简介:
+关注继续查看
最近写了点关于将excel导入数据库的代码,当然也可以看做是对前面所介绍的小项目进行补充所做的准备。
  我一般都是先完成功能,然后将其封装成块,再添加到项目中,个人癖好不值得借鉴。项目中关于解析excel数据的方式请参考:http://blog.csdn.net/trsli/article/details/17392943
  这是已经成功插入数据化数据库中数据的记录,我新建的表为db.                            这是在控制台的数据输入
  很多时候拼接字符串是很多项目必须做的,该代码中我拼接了不少sql语句,也许有更简单的方式,但是我现在只能想到这一步。
/**将execl数据导入数据库
* @author trsli
* */
public class CreateDBTable {
private static Connection conn;
private static String sql="";
private static StringBuffer buf=new StringBuffer();
static{
conn=DBConnection.getConnection();
}
public static void main(String[] args) {
//数据.xls文件路径
System.out.println("输入文件路径:");
String filename=new Scanner(System.in).nextLine();
//获取需要插入数据库的数据内容
Object[][] contents=new PoiUtil().getmessage(filename);
//获取数据库创建表格的字段名
Object[] titles=new PoiUtil().gettitles(filename);
System.out.println("输入数表格名:");
String fname=new Scanner(System.in).nextLine();
try {
String ziduan="";
String blank="";
PreparedStatement stmt=conn.prepareStatement(sql);
buf.append("create table "+fname+"( id int primary key auto_increment");
//拼接字符串,主要是为了完全实现动态创建数据表格以及后期插入数据
<span style="color:#ff6666;">for(int i=0;i<titles.length;i++){
buf.append(","+titles[i]+"  varchar(20)");
if(i==titles.length-1){//字符串末尾没有“,”
ziduan+=titles[i]+"";
blank+="?";
}else{
ziduan+=titles[i]+",";
blank+="?,";
}
}
</span>         //sql数据拼装完成
sql="insert into "+fname+"("+ziduan+") values ("+ blank+")";
buf.append(" );");
stmt.executeUpdate(buf.toString());
System.out.println("预处理...");
try {
Thread.sleep(2000);//用于保证数据库建表操作完成
System.out.println("建表成功...");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
<span style="color:#ff6666;">for(int i=0;i<contents.length;i++){
Object[] content=contents[i];//获取一行数据
PreparedStatement insert=conn.prepareStatement(sql);
for(int j=0;j<content.length;j++){
insert.setString(j+1, content[j].toString());//预加载数据
}
insert.executeUpdate();//插入数据
System.out.println("第"+i+"行成功...");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
</span>         }
System.out.println("插入数据完成");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

 整个代码很简单,可以从中提取出需要的方法,用于其它需要的地方,而这就是未来需要做的。个人感觉还有许多需要改进的地方,当然自从开始研究POI以来,我还没有对其进行更加深入的理解。比如红色代码块可以用批处理模式:addbatch方法。代码中的Thread.sleep()显得有点多余,主要原因是excel中德数据太少。
  这是数据库中数据的显示。  以下是原数据:
  最近公司安排的事情做得有点吃力,所以写点代码调节一下枯燥的心情。
最新内容请见作者的GitHub页:http://qaseven.github.io/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java数据导入(读)Excel文件 解析
  在编程中经常需要使用到表格(报表)的处理主要以Excel表格为主。下面给出用java读取excel表格方法:   1.添加jar文件   java导入导出Excel文件要引入jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
619 0
杭电1789贪心java实现
伊格内修斯有很多功课要做。每个老师都会给他一个交作业的截止日期。如果在截止日期之后提交作业,老师会减少他的最终考试成绩。现在我们假设每个人做功课都需要一天的时间。所以希望你帮助他安排作业的次序,以尽量减少分数。
0 0
杭电2062java实现
考虑总= { 1,2,…,n }。例如,A1 = { 1 },A3 = { 1,2,3 }。子集序列被定义为非空子集的数组。对词典编纂顺序中的所有子集进行排序。你的任务是找到第m个。
0 0
杭电1421java实现
每组输入数据有两行,第一行有两个数n,k(2<=2k<=n<2000).第二行有n个整数分别表示n件物品的重量(重量是一个小于2^15的正整数).
0 0
杭电2037java实现
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
0 0
java实现简单链表
链表是由一个个节点连接起来的。
0 0
Java实现简单的队和栈
对于Java的队和栈个人用的不太多,更喜欢用List集合类。
0 0
java实现简单的二叉树ADT
java实现简单的二叉树ADT
0 0
杭电1728bfs逃离迷宫java实现
给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,gloria不能走到迷宫外面去。令人头痛的是,gloria是个没什么方向感的人,因此,她在行走过程中,不能转太多弯了,否则她会晕倒的。我们假定给定的两个位置都是空地,初始时,gloria所面向的方向未定,她可以选择4个方向的任何一个出发,而不算成一次转弯。gloria能从一个位置走到另外一个位置吗?
0 0
杭电1180java实现(bfs)
多组数据输入M N,表示大小然后输入地图。*表示墙壁,’.‘表示可以通过,S初始,T结尾位置,‘-’,‘|’代表初始楼梯状况,每隔一秒就会换成对方。-左右走,跳过楼梯,|上下走,跳过楼梯(相当于走两格)
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
阿里云MongoDB备份恢复功能说明和原理介绍
立即下载
MySQL Java开发实战
立即下载
PG Ganos时空场景开发实践
立即下载