如何用Java將excel資料匯入資料庫

javascript前鋒發表於2013-12-26

最近寫了點關於將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中德資料太少。

 

    

這是資料庫中資料的顯示。  以下是原資料:

最近公司安排的事情做得有點吃力,所以寫點程式碼調節一下枯燥的心情。

相關文章