I am trying to read data from csv file and insert into DB, using batch insertion. But it’s throwing multiple exceptions.
java.sql.BatchUpdateException: A statement attempted to return a result set in executeBatch().<br>
SEVERE: Servlet.service() for servlet oms threw exception
java.lang.OutOfMemoryError: Java heap space ……. <br>
Inserting code is bellow given :-
public long updateOpenOrdData(Connection conn, String[] paramStrObj)throws Exception {
long updatedRow = 0;
CallableStatement cstmt = null;
// System.out.println("StrAtt length :"+ strArr.length);
try{
for(int i=0; i<paramStrObj.length; i++){
int count =1;
int index = 0;
String[] dataArr = paramStrObj[i].split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1);
if(!dataArr[0].equals("SLC_Code_Desc") && dataArr.length >= 24 ){
cstmt = conn.prepareCall(PROC_INSERT_OPEN_ORD_TEMP);
System.out.print(dataArr[index]+", ");
cstmt.setString(count++, dataArr[index++]);
System.out.print(dataArr[index]+", ");
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index++]);
cstmt.setString(count++, dataArr[index]);
cstmt.setString(count++, null);
cstmt.setString(count++, null);
cstmt.setString(count++, null);
cstmt.addBatch();
//cstmt.executeUpdate();
}
}
int[] insertRow =cstmt.executeBatch();
System.out.println("Inserted row are :: "+insertRow);
}catch (Exception e) {
//System.out.println("Wrong data at line "+i+" and column "+ --index);
e.printStackTrace();
}finally{
new DBService().releaseResources(null, cstmt);
}
return updatedRow;
}
I need to insert data up to 100 GB. In this code one row is inserting every time.