java.sql.SQLSyntaxErrorException: ORA-01722: 数値が無効です。
のエラーが出ました。CSVファイルを読み込ませ、データベースに記入するシステムを作りたく、その途中で上記のエラーが出ました。
CSV書き込みのコントローラに
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
CSVReader csvReading;
String fileName;
T001ItemDao itemDao;
String nextPage = "";
String name = request.getParameter("name");
String code = request.getParameter("code");
// //金額の取得
String unitPrice = request.getParameter("unitPrice");
// 数量の取得
String count = request.getParameter("count");
String isPR = request.getParameter("isPR");
String img = request.getParameter("image");
ServletContext con = getServletConfig().getServletContext();
csvReading = new CSVReader();
csvReading.csvAdd(request,con);
List<List<String>> csvResult = csvReading.read();
for(int i = 4; i < csvResult.size(); i++) {
if (null != csvResult.get(i)) {
for (int j = 0; j < csvResult.get(i).size(); j++) {
System.out.println("csvResult"+csvResult.get(i).get(j));
if (0 == (i % 4)){
try {
itemDao = new T001ItemDao();
int itembean = itemDao.update(code, name, unitPrice, count);
request.setAttribute("itembean", itembean);
nextPage = "/list.jsp";
} catch (ClassNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}else{
try {
itemDao = new T001ItemDao();
int result = itemDao.addItem(name, unitPrice, count,isPR,img);
if (result == 1) {
nextPage = "/list.jsp";
} else {
nextPage = "/add.jsp";
}
} catch (ClassNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
}
}
System.out.println("csvResult"+csvResult);
}
と書き、CSV書き込みのクラスに
public List<List<String>> read() {
// 返却用リスト箱作成
List<List<String>> ret = new ArrayList<List<String>>();
if (fileName != null) {
System.out.println("fileName" + fileName);
String inputCsvFile = "C:\\pleiades\\workspace\\hasuike\\jspServlet\\WebContent\\csv\\test1.csv";
File csv = new File(inputCsvFile);
System.out.println(csv);
BufferedReader br = null;
try {
int lineCount = 0;
// ファイルオープン
br = new BufferedReader(new FileReader(csv));
// num行読み込む(0の場合は全行)
String line = "";
int idx = 0;
while ((line = br.readLine()) != null) {
lineCount++;
// 1行を格納する箱作成
List<String> tmpList = new ArrayList<String>();
// 文字列index
int idxFrom = 0;
int idxTo = 0;
// 文字列長
while (true) {
// 最終項目を取得後は終了
if (idxFrom > line.length()) {
break;
}
// 次のセパレータ位置を取得
idxTo = line.indexOf(",", idxFrom);
// セパレータが発見できない場合は最終項目を取得
if (idxTo == -1) {
idxTo = line.length();
}
// 文字列取得
String word = line.substring(idxFrom, idxTo);
// 文字列を格納
tmpList.add(word);
// 検索開始位置を更新
idxFrom = idxTo + 1;
}
// 返却用リストに1行データを格納
ret.add(tmpList);
// numを超えたら読み込み終了。numが0のときは全量読む。
if (lineCount != 0 && idx > lineCount) {
break;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return ret;
}
と書きました。エラーの内容を調べてみると型変換の失敗時に出るエラーであるとわかりました。
とってきて csvResult
に入れるリストが[, スタバもか, 400, 40, 1], [518, green, 444, 35, 0]]
のように配列の最初の要素が空である場合があります。
それにより、エラーが出たのかな、とはおもうのですが、直し方がわからず...
(そもそもその部分ではないかもしれません)
どのように直せばよいのでしょうか?