qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          如何用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中德數據太少。
            這是數據庫中數據的顯示。  以下是原數據:
            最近公司安排的事情做得有點吃力,所以寫點代碼調節一下枯燥的心情。

          posted on 2014-01-02 09:04 順其自然EVO 閱讀(273) 評論(0)  編輯  收藏 所屬分類: 數據庫

          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 永新县| 隆安县| 姚安县| 栖霞市| 荔波县| 铁岭市| 赤城县| 武功县| 中牟县| 麦盖提县| 江源县| 陆良县| 长汀县| 永胜县| 探索| 睢宁县| 岳西县| 宁都县| 和田市| 石家庄市| 和龙市| 富蕴县| 兴海县| 梓潼县| 宿州市| 无锡市| 温宿县| 社旗县| 松原市| 宣汉县| 南开区| 岑巩县| 平南县| 营口市| 习水县| 阿拉善盟| 海丰县| 左权县| 枣庄市| 乐陵市| 文昌市|