プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
csvファイルのデータをQueryRunner.batchメソッドでインサートしたいのです。

以下のメソッドでcsvファイルから取り出したデータをカンマで区切り、
Object[][]の形で帰したいのですが、うまくいきません。
次のExceptionが発生してしまいます。
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [[Ljava.lang.String;

どのようにしたら良いか、ご教授願えないでしょうか。
お願いします。


private Object[][] getParm(List dataList, int colCnt){
List parmList = new ArrayList();
String data;
for(Iterator ite = dataList.iterator(); ite.hasNext(); ){
data = (String) ite.next();
//Stringをフィールド毎の配列に変換
String[] fieldList = new String[colCnt]; //データのカラム数分の配列を作成
String[] tempList = data.split(",");
System.arraycopy(tempList, 0, fifieldList);
}
return (String[][]) parmList.toArray();
}

A 回答 (2件)

・ エラーは、


data = (String) ite.next();
で起こっていると思われるので、まず引数
List dataList
に、csvファイルの各行が文字列として入っているかどうかが疑われます。
まずそのことを確認してみてください。

・ 次にメソッドを次のように置き換えて実行してみてください。
------------------------------------------------------------
private static String[][] getParm(ArrayList dataList, int colCnt) {
String[][] ss2 = new String[dataList.size()][];
int k=0;
for (Iterator ite = dataList.iterator(); ite.hasNext(); k++) {
String data = (String) ite.next();
ss2[k] = data.split(",");
}
return ss2;
}

------------------------------------------------------------
・ 何処でエラーが起こったかを知らせてもらえますか。
    • good
    • 0

 private Object[][] getParm(List dataList, int colCnt){


 // private String[][] getParm(List dataList, int colCnt){ //こっちにすべき
  List parmList = new ArrayList();
  String data;
  for (Iterator ite = dataList.iterator(); ite.hasNext(); ){
   data = (String)ite.next();
   String[] fieldList = new String[colCnt];
   String[] tempList = data.split(",");
   System.arraycopy(tempList, 0, fifieldList); //不正かつ意味不明な呼び出し
   //一体何のために別の配列にコピーすんの??, コピーしなくてもいいのでは?
   //しかも、こんな無防備な操作では、ちゃんとcolCnt個あるのか、ヤバイよ.
  }
  return (String[][]) parmList.toArray(); // parmListは空のまま??
  // return parmList.toArray(new String[1][1]); //こちらを使う
  // ... ArrayListのドキュメンテーションを読んでください
 }
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!