如何用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");
			//拼接字符串,主要是为了完全实现动态创建数据表格以及后期插入数据
			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中德数据太少。

 

    

这是数据库中数据的显示。  以下是原数据:

最近公司安排的事情做得有点吃力,所以写点代码调节一下枯燥的心情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值