如何用Java将excel数据导入数据库
2013-12-26 17:12
656 查看
最近写了点关于将excel导入数据库的代码,当然也可以看做是对前面所介绍的小项目进行补充所做的准备。
我一般都是先完成功能,然后将其封装成块,再添加到项目中,个人癖好不值得借鉴。项目中关于解析excel数据的方式请参考:http://blog.csdn.net/trsli/article/details/17392943
这是已经成功插入数据化数据库中数据的记录,我新建的表为db. 这是在控制台的数据输入
很多时候拼接字符串是很多项目必须做的,该代码中我拼接了不少sql语句,也许有更简单的方式,但是我现在只能想到这一步。
整个代码很简单,可以从中提取出需要的方法,用于其它需要的地方,而这就是未来需要做的。个人感觉还有许多需要改进的地方,当然自从开始研究POI以来,我还没有对其进行更加深入的理解。比如红色代码块可以用批处理模式:addbatch方法。代码中的Thread.sleep()显得有点多余,主要原因是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"); //拼接字符串,主要是为了完全实现动态创建数据表格以及后期插入数据 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+="?,"; } } //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(); } 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(); } } System.out.println("插入数据完成"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
整个代码很简单,可以从中提取出需要的方法,用于其它需要的地方,而这就是未来需要做的。个人感觉还有许多需要改进的地方,当然自从开始研究POI以来,我还没有对其进行更加深入的理解。比如红色代码块可以用批处理模式:addbatch方法。代码中的Thread.sleep()显得有点多余,主要原因是excel中德数据太少。
这是数据库中数据的显示。 以下是原数据:
最近公司安排的事情做得有点吃力,所以写点代码调节一下枯燥的心情。