2017-08-07 6 views
0

これを実行するには、良い方法を視覚化するのに苦労しています。下のコードでわかるように、私はすべての行と各セルの値を取得しています。ただし、実際にクエリを実行してテーブルに追加する場合は、一度に行全体を入力する方が簡単です。エクセル文書の各列に別々の値を設定したくない場所でも十分な列/可変性があります。どのようにこれをより効率的に実行するためのアイデア?Teradata(または他のデータベース)フォーマットにExcelを押し込むことで、セルを読み取る

for (int i=1; i<rowNum; i++) { 
        XSSFRow row = ws.getRow(i) ; 
         for (int j = 0; j<colNum; j++) { 
          XSSFCell cell = row.getCell(j) ; 
          String value = cell.getStringCellValue(); 
          data[i][j] = value ; 
          System.out.println("the value is " + value); 
          stmt.executeUpdate("INSERT INTO databasetable VALUES(" + value + ")"); 
         } 
       } 
+0

実際には、各セル(各行ではない)ごとに新しいレコードが挿入されるので、実際にはこれに従いません。とにかく、おそらくteradataはインポートツールを提供します。 Javaが必要ですか? –

+0

私はむしろCSVにエクスポートし、それを速く読み込みます - かなり簡単で、64k +枚で数秒かかります。ちょうどアイデア。 –

答えて

0

ワークシートにイテレーターを生成して効率を上げることができます。

public static Vector read(String fileName) { 
    Vector cellVectorHolder = new Vector(); 
    try{ 
     FileInputStream myInput = new FileInputStream(fileName); 
     XSSFWorkbook myWorkBook = new XSSFWorkbook(myInput); 
     XSSFSheet mySheet = myWorkBook.getSheetAt(0); 
     Iterator rowIter = mySheet.rowIterator(); 
     while(rowIter.hasNext()){ 
      XSSFRow myRow = (XSSFRow) rowIter.next(); 
      Iterator cellIter = myRow.cellIterator(); 
      List list = new ArrayList(); 
      while(cellIter.hasNext()){ 
       XSSFCell myCell = (XSSFCell) cellIter.next(); 
       list.add(myCell); 
      } 
      cellVectorHolder.addElement(list); 
     } 
    }catch (Exception e){e.printStackTrace(); } 
    return cellVectorHolder; 
} 
+0

2017年に 'Vector'を使用する興味深い選択。 – Kayaman

+0

実際に私は彼にイテレータについて言及したいと思います...データ構造はあなたの選択にあります:) – Jeyaprakash

0

以下のような

何かが私はconcentationを使用して終了し、ちょうどループのために、それぞれの値の間、挿入します。

関連する問題