Java実装の一括インポートExcelデータデータベース

Java実装の一括インポートExcelデータデータベース

 

概要:

このガジェットクラスは、クロスデータベース誘導体の数に言及する必要があるときにああ、...いくつかの必要性は、OracleのMySQLは、MySQLからいくつかのOracleのインポートからインポートするためのエピソードで動作します

練習の後、我々はNavicatはMySQLデータベースに接続するためのツールを使用しています、csv形式として、Oracleデータベースからデータをエクスポート、インポートのMySQLは非常に高速で、おそらく問題はそれの毎分

しかし、我々はオープンで、私は通常50000 6のデータフィールド..... PLSQLのOracleデータベース接続を使用して、非常に遅い、Oracleを挿入するSQLファイルmysqlデータベースの形式でデータをエクスポートするときコマンドウィンドウは、ほぼ2時間を実行する必要がある - これは本当に恐ろしいツールであり、時には問題があり、低すぎると効率...再び開始する....中断を余儀なくされました

以下の派生ツールを使用してそう。

 

新しいMavenプロジェクト、プロジェクト名は、ああカスタマイズすることができます

直接メインメソッドを実行するために使用ExecuteDataExcelToOracle.javaクラス

  あなたのExcelファイルを交換する必要があります

  あなたは、データベースの接続情報を交換する必要があります

  あなたのテーブルの情報を交換する必要がある、とフィールド(内部ここもフィールドデータ関連ああ、あなたはフィールドには〜あなた自身を追加して続けてください以上10ヘクタールでインポートする場合)

主に、私たちは次のことを実行します。

オブジェクトにExcelファイル、Excelデータファイルを一つずつ解決

2.データベースにデータベースのデータに接続します

このツールのクラスのインポートデータにより、約50,000データは限り2分、および時間のほとんどはエクセル〜の構文解析に費やされているとして、効率は〜単にハハハッハッハ普通高くありません  

パッケージcom.imodule.dataImport.dataImport.main; 

インポートのjava.io.File; 
輸入java.io.FileInputStream; 
インポートしたjava.io.Serializable; 
インポートのjava.sql.Connection; 
インポートのjava.sql.DriverManager。
インポートのjava.sql.PreparedStatement; 
輸入ます。java.sql.SQLException; 
輸入java.text.DateFormatの。
輸入java.text.SimpleDateFormatの。
輸入はjava.util.ArrayList; 
輸入はjava.util.List; 
輸入java.util.Date; 

輸入org.apache.commons.lang.StringUtils。
輸入org.apache.poi.ss.usermodel.CellType。
輸入org.apache.poi.ss.usermodel.Row。
輸入org.apache.poi.ss.usermodel.Sheet。
輸入org.apache.poi.ss.usermodel.Workbook;
輸入org.apache.poi.ss.usermodel.WorkbookFactory;


パブリッククラスExecuteDataExcelToOracle { 

		パブリック静的無効メイン(文字列[] args){ 

			{試みる
				リスト<データ> DATAS = loadExcel( "C:/Users/xxxx/Desktop/aa.xlsx"); //需要替换
				batchInsert(DATAS)。
				
			}キャッチ(例外e){ 
				e.printStackTrace(); 
			} 

		} 
		
		/ ** 
		 *获取エクセル中的数据
		 * @paramファイルパス
		 * @return 
		 * @throws例外
		 * / 
		パブリック静的リスト<データ> loadExcel(文字列のファイルパスが)例外{スロー
			ファイルファイル=新しいファイル(ファイルパス)を、
			ワークブックWB = WorkbookFactory.create(新しいFileInputStreamを(ファイル));
	        シートのシート= wb.getSheetAt(0)。 
	        リスト<データ> =新しい新しいDATASのArrayList <>(); //ラインによりデータ線にデータを追加するには、インサートとして、コレクションに追加され基準へのデータ
	        行row = NULL;
	        以下のために(INT I = 1; I <= sheet.getLastRowNum(); iは++){ 
	        	するSystem.out.println( "i =" + I)。
	            行= sheet.getRow(I)。
	            IF(行は== NULL || StringUtils.isEmpty(row.getCell(0).getStringCellValue())){ 
	            	続けます。
	            } 
	            データData =新しいExecuteDataExcelToOracle()新しいデータ()。   
	            data.setStr1(row.getCell(0)== nullの"":?row.getCell(0).getStringCellValue()); 
	            data.setStr2(row.getCell(1)== nullの"":?row.getCell(1).getStringCellValue()); 
	            data.setStr3(row.getCell(2)== nullの"":?row.getCell(2).getStringCellValue());
	            data.setStr4(row.getCell(3)== nullの"":?row.getCell(3).getStringCellValue()); 
	            data.setStr5(row.getCell(4)== nullの"":?row.getCell(4)。
	            data.setStr6(row.getCell(5)== nullの"":?row.getCell(5).getStringCellValue()); 
	            
	          // row.getCell(5).setCellType(CellType.STRING)。
	            IF(row.getCell(6)== NULL){ 
	            	data.setStr7( "")。
	            }他{ 
		            日付d =(日)row.getCell(6).getDateCellValue(); 
					DateFormatのフォーマッタ=新しいてSimpleDateFormat( "YYYY-MM-DD HH:MM:SS")。
					文字列、日付= formater.format(D)。
		            data.setStr7(日付); 
	            } 
	            
	            data.setStr8(row.getCell(7)== NULL "":row.getCell(7).getStringCellValue())。
	            data.setStr9(row.getCell(8)== nullの"":?row.getCell(8).getStringCellValue()); 
	            data.setStr10(row.getCell(9)== nullの"":?row.getCell(9).getStringCellValue()); 
	            
	            datas.add(データ)。
	            
			件のデータを返します。
		} 
		
		/ ** 
		 *批量执行插入数据
		 * @paramのDATAS 
		 * / 
		パブリック静的ボイドbatchInsert(一覧<データ> DATAS){ 
			長いのstartTime =にSystem.currentTimeMillis(); 

			接続でCONN = NULL; 
					stmt.setString(3、v.getStr3())。
					stmt.setString(4、v.getStr4())。 
			試み{ 
				Class.forNameの( "oracle.jdbc.driver.OracleDriverと"); //あなたはそれを交換する必要がある場合は、Oracleを交換する必要がある場合、MySQL 
				でCONN =したDriverManager.getConnection( " JDBC:オラクル:薄い:10.11.22.33 @ 1521::デモ""根"" 111「);//交換する必要があります
				conn.setAutoCommit(偽); 

				PreparedStatement STMT = conn.prepareStatement( ")、、、、、、、、、(temp_user_info値にINSERT??????????")。//需要替换
				
				//System.out.println( "数据大小:" + datas.size()); 

				int型NUM = 0; 
				(データV:DATAS)用{ 
					NUM ++。
					stmt.setString(1、v.getStr1())。
					stmt.setString(2、v.getStr2())。
					stmt.setString(5、v.getStr5())。
// stmt.setString(6、v.getStr6())。
					stmt.setString(6、v.getStr6())。
					stmt.setString(7、v.getStr7())。
					stmt.setString(8、v.getStr8())。
					stmt.setString(9、v.getStr9())。
					stmt.setString(10、v.getStr10())。
					stmt.addBatch(); 
					//每5万、提交一次
					IF(NUM> 50000){ 
						stmt.executeBatch()。
						conn.commit(); 
						NUM = 0; 
					} 
				} 
				stmt.executeBatch()。
				conn.commit(); 
			}キャッチ(例外e){ 
				e.printStackTrace(); 
				{試みる
					conn.rollbackを(); 
				}キャッチ(のSQLException E1){
					e1.printStackTrace(); 
				} 
			}最後に{ 
				{試みる
					()はconn.closeします。
				}キャッチ(のSQLException E){ 
					e.printStackTrace(); 
				} 
				長いendTimeは=にSystem.currentTimeMillis(); 
				System.out.println( "方法执行时间:" +(endTimeは-のstartTime)+ "MS")。
			} 
		} 
		
		 
		クラスデータは{シリアライズ実装します
			プライベート静的最終長いのserialVersionUID = 1L。
			
			プライベート文字列STR1。
			プライベート文字列STR2。
			プライベート文字列STR3。
			プライベート文字列STR4。
			プライベート文字列STR5。
			プライベート文字列STR6。
			プライベート文字列STR7。
			プライベート文字列STR8。
			プライベート文字列STR9。
			プライベート文字列STR10。
			パブリック文字列getStr7(){ 
				戻りSTR7。
			} 
			公共ボイドsetStr7(文字列STR7){ 
				this.str7 = STR7。
			} 
			パブリック文字列getStr8(){ 
				戻りSTR8。
			} 
			公共ボイドsetStr8(文字列STR8){ 
				this.str8 = STR8。
			} 
			パブリック文字列getStr9(){ 
				戻りSTR9。
			}
			公共ボイドsetStr9(文字列STR9){ 
				this.str9 = STR9。
			} 
			パブリック文字列getStr10(){ 
				STR10を返します。
			} 
			公共ボイドsetStr10(文字列STR10){ 
				this.str10 = STR10。
			} 
			パブリック文字列getStr1(){ 
				戻りSTR1。
			} 
			公共ボイドsetStr1(文字列STR1){ 
				this.str1 = STR1。
			} 
			パブリック文字列getStr2(){ 
				戻りSTR2。
			} 
			公共ボイドsetStr2(文字列STR2){ 
				this.str2 = STR2。
			} 
			パブリック文字列getStr3(){ 
				戻りSTR3。
			} 
			公共ボイドsetStr3(文字列STR3){ 
				this.str3 = STR3。
			}
			パブリック文字列getStr4(){ 
				戻りSTR4。
			} 
			公共ボイドsetStr4(文字列STR4){ 
				this.str4 = STR4。
			} 
			パブリック文字列getStr5(){ 
				戻りSTR5。
			} 
			公共ボイドsetStr5(文字列STR5){ 
				this.str5 = STR5。
			} 
			パブリック文字列getStr6(){ 
				戻り化6。
			} 
			公共ボイドsetStr6(文字列化6){ 
				this.str6 =化6。
			} 
			
		} 


}

  

pom.xml

<プロジェクトのxmlns = "http://maven.apache.org/POM/4.0.0"のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" 
  のxsi:schemaLocationの= "のhttp:/ /maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd "> 
  <modelVersion> 4.0.0 </ modelVersion> 

  <groupIdを> com.imodule。 dataImport </ groupIdを> 
  <たartifactId> dataImport </たartifactId> 
  <バージョン> 0.0.1-SNAPSHOT </バージョン> 
  <パッケージ> JAR </パッケージ> 

  <名前> dataImport </名前> 
  <URL>のhttp://達人。 apache.org </ URL> 

  <プロパティ> 
    <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> 
  </プロパティ> 

  <依存関係> 
    <依存> 
      <groupIdを> JUnitの</ groupIdを> 
      <たartifactId> JUnitの</たartifactId>
      <バージョン> 3.8.1 </ version>の
      <スコープ>テスト</スコープ> 
    </依存関係> 
    
   <! -ポイ相关- > 
	<依存> 
	    <groupIdを> org.apache.poi </ groupIdを> 
	    <たartifactId>ポイ</たartifactId> 
	    <バージョン> 4.0.1 </バージョン> 
	</依存> 
	<依存性> 
	    <のgroupId> org.apache.poi </のgroupId> 
	    <たartifactId> POI-OOXML </たartifactId> 
	    <バージョン> 4.0.1 < /バージョン> 
	</依存> 
	<依存性> 
	    <のgroupId> org.apache.poi </のgroupId> 
	    <たartifactId> POI-OOXML-スキーマ</たartifactId> 
	    <バージョン> 4.0.1 </バージョン> 
	</依存関係>

    <! - https://mvnrepository.com/artifact/commons-io/commons-io - > 
	<依存> 
	    <groupIdを>コモンズ-IO </ groupIdを> 
	    <たartifactId>コモンズ-IO </たartifactId> 
	    <バージョン> 2.4 </バージョン> 
	</依存関係> 
	
	<! - https://mvnrepository.com/artifact/commons-lang/commons-lang - > 
	<依存> 
	    <groupIdを>コモンズ-LANG </ groupIdを> 
	    <たartifactId>コモンズ-lang </たartifactId> 
	    <バージョン> 2.4 </ version>の
	</依存関係> 
	
    <! - https://mvnrepository.com/artifact/com.oracle/ojdbc6 - > 
	<依存> 
        <groupIdを> ojdbc </ groupIdを> 
        <たartifactId> ojdbc </たartifactId> 
	    <バージョン> 6 </バージョン> 
    </依存>
     
  </依存関係> 
</プロジェクト>

  

このパッケージを必要とする主なポンポンがより困難に取得するようです

 <依存性> 
        <のgroupId> ojdbc </のgroupId> 
        <たartifactId> ojdbc </たartifactId> 
	<バージョン> 6 </バージョン> 
    </依存>

私はシャシ侯は、パッケージを入れて参照する必要があり、この時間は、私のgithubのアップに達し、その時は、ダウンロードアドレスで利用可能なブログを、更新されます

 

2つの値を注意するために、データのインポートをするとき、あり
1.null
2日付値の種類を

 

割り当てにはnullの場合はnullについて、私の計画は、「」、プロセスがnullかどうかを決定することです

data.setStr1(row.getCell(0)== nullの "":?row.getCell(0).getStringCellValue());

 

日付については、私の治療プログラムは、手動変換である(ここでは、直接、データ型を使用することはできません日付が自動的に49555.4同様のデータとして計算されます、その時は、データベースなどのデータに保存されているので、我々はそれが〜この文字列を使用します)

  IF(row.getCell(6)== NULL){ 
	data.setStr7( "")。
   }他{ 
	日付d =(日)row.getCell(6).getDateCellValue(); 
	DateFormatのフォーマッタ=新しいてSimpleDateFormat( "YYYY-MM-DD HH:MM:SS")。
	文字列、日付= formater.format(D)。
	 data.setStr7(日付); 
   }

  

おすすめ

転載: www.cnblogs.com/DFX339/p/10979048.html