Following code needs modification can we use constants files if yes then how we can segregate string in separate files so that loop continues then performance is not impacted
for (int j = 0; j < subconfigListRLC.size(); j++) {
StringBuffer sqlQuery = new StringBuffer();
test = (SubConfigurationDetailsObject) subconfigListRLC.get(j);
if (test.getFlag().equalsIgnoreCase("T")) {
sqlQuery = sqlQuery.append("update SUB_CONFIG set TSTED = "
+ test.getSubConfigurationIndexNo() + " , Q_SUB_INDX = 0 "
+ "where BASE_ENG_KEY = '" + test.getBaseEngineKey() + "' "
+ "AND MODEL_YEAR = '" + modelYear + "' "
+ "AND RLHP_LVW = '" + test.getRoadLoadHorsepowerValue() + "' "
+ "AND LVW_TEST_WT_WO_CONT = '" + test.getEtwValue() + "' "
+ "AND INERTIA_WT_CLASS = '" + test.getInertiaWeightClassNo() + "' "
+ "AND TEST_GROUP_ID = " + test.getTestGroupId() + " "
+ "AND ENGINE_CODE = '" + test.getEngineCode() + "' "
+ "AND AXLE_RATIO = '" + test.getAxleRatioValue() + "'");
} else if (test.getFlag().equalsIgnoreCase("U")) {
sqlQuery = sqlQuery.append("update SUB_CONFIG set Q_SUB_INDX = "
+ test.getSubConfigurationIndexNo() + " "
+ "where BASE_ENG_KEY = '" + test.getBaseEngineKey() + "' "
+ "AND MODEL_YEAR = '" + modelYear + "' "
+ "AND RLHP_LVW = '" + test.getRoadLoadHorsepowerValue() + "' "
+ "AND LVW_TEST_WT_WO_CONT = '" + test.getEtwValue() + "' "
+ "AND INERTIA_WT_CLASS = '" + test.getInertiaWeightClassNo() + "' "
+ "AND TEST_GROUP_ID = " + test.getTestGroupId() + " "
+ "AND ENGINE_CODE = '" + test.getEngineCode() + "' "
+ "AND AXLE_RATIO = '" + test.getAxleRatioValue() + "'");
}
//System.out.println("Query----------->"+sqlQuery.toString());
processor.getUpdateAccessor().executeUpdateSql(sqlQuery.toString());
}
Use a Java PreparedStatement in order to build the query. You can then store the query string for the PreparedStatement in a properties file. Read the two possible query strings into variables before entering the loop (in fact you may want to build both PreparedStatements before entering the loop - depending on whether you always use them both). You can then call clearParamaters, then set your new parameters, execute, repeat.
As you asked for the exact details, something like this. Search for javadocs on PreparedStatement. Javadocs are always worth reading.
String sql = "update SUB_CONFIG set TSTED = ? , Q_SUB_INDX = ? " +
"where BASE_ENG_KEY = ? " +
"AND MODEL_YEAR = ? " +
"AND RLHP_LVW = ? " +
"AND LVW_TEST_WT_WO_CONT = ? " +
"AND INERTIA_WT_CLASS = ? " +
"AND TEST_GROUP_ID = ? " +
"AND ENGINE_CODE = ? " +
"AND AXLE_RATIO = ?");
PreparedStatement statement = connection.createPreparedStatement(sql);
for (SubConfigurationDetailsObject test: subconfigListRLC) {
if (test.getFlag().equalsIgnoreCase("T")) {
statement.setIntParam(1, test.getSubConfigurationIndexNo());
statement.setIntParam(2, 0);
} else if (test.getFlag().equalsIgnoreCase("U")) {
statement.setIntParam(1, 0);
statement.setIntParam(2, test.getSubConfigurationIndexNo());
} else {
continue;
}
statement.set...Param(3, ...);
...
statement.executeUpdate();
}
You may probably only need one PreparedStatement, and the result is indeed faster.
BTW. better use StringBuilder instead of StringBuffer.
I had been facing this exception from very long time.
My tomcat/java web application having very large no of database transaction.
I am using MSSQL server as my back end and using DBCP, database connection pooling in tomcat.
I have following practice of using this.
DB pooling in my servlet.
//Skeleton
dopost
{
//geting connection using JNDI
//Creating statement object
// calling method of execution of Business Logic
}
finally
{
//closing all DB resorces
}
Business Logic
{
//do all Database transaction
}
//Original code spinet
public class Frm_mst_operation_II extends HttpServlet
{
protected void doPost(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse) throws ServletException, IOException
{
try
{
String option=httpservletrequest.getParameter("option");
InitialContext initialcontext = new InitialContext();
if(initialcontext == null)
throw new Exception("Boom - No Context");
InitialContext initialcontext2 = new InitialContext();
if(initialcontext2 == null)
throw new Exception("Boom - No Context");
Context context = (Context)initialcontext.lookup("java:/comp/env");
Context context2 = (Context)initialcontext.lookup("java:/comp/env");
DataSource datasource = (DataSource)context.lookup(RuntimeConf.abi_database);
DataSource datasource_sql = (DataSource)context2.lookup(RuntimeConf.abi_sql_database);
if(datasource != null)
{
if(dbcon == null)
{
dbcon = datasource.getConnection();
}
else
{
if(!dbcon.isClosed())
{
dbcon.close();
}
dbcon = datasource.getConnection();
}
if(dbcon_sql == null)
{
dbcon_sql = datasource_sql.getConnection();
}
else
{
if(!dbcon_sql.isClosed())
{
dbcon_sql.close();
}
dbcon_sql = datasource_sql.getConnection();
}
if(dbcon_sql != null)
{
dbcon.setAutoCommit(false);
dbcon_sql.setAutoCommit(false);
stmt_ora1 = dbcon.createStatement();
stmt = dbcon_sql.createStatement();
if(option.equals("Insert_cge_Data"))
{
Insert_CGE_Data(httpservletrequest);
}
dbcon.close();
dbcon_sql.close();
dbcon=null;
dbcon_sql=null;
}
}
else
{
System.out.println("Data Source Not Found - Error : Exception In Frm_mst_operation_II");
}
httpservletresponse.sendRedirect(url);
}
catch(Exception exception)
{
System.out.println("Exception In Frm_mst_operation_II And Exception Is :: "+exception);
exception.printStackTrace();
}
finally
{
if(rset != null)
{
try
{
rset.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
rset = null;
}
if(stmt != null)
{
try
{
stmt.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
stmt = null;
}
if(stmt_ora1 != null)
{
try
{
stmt_ora1.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
stmt_ora1 = null;
}
if(dbcon != null)
{
try
{
dbcon.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
dbcon = null;
}
if(dbcon_sql != null)
{
try
{
dbcon_sql.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
dbcon_sql = null;
}
}
}//End Of doPost() Method ...
public void Insert_CGE_Data(HttpServletRequest request) throws IOException,
ServletException, SQLException {
try
{
query_th_ora = " INSERT INTO PR_OPR_TH " + " ( "
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, MCH_N, SHIFT_N, STRT_TIME, "
+ " END_TIME, PROD_N, BODY_N, "
+ " CAR_N , FIRE_N, CREATED_UID," + " CREATED_D , " +
// " UPDATED_UID, UPDATED_D" +
" TRNTYP , TOT_QTY " + " , RSN_N ) " + " VALUES " + " ( "
+ " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " to_date('" + trn_d
+ "', 'dd/mm/yyyy') , '" + mch_nm
+ "', '" + shift + "', to_date('" + in_time
+ "', 'dd/mm/yyyy hh:mi:ss AM'), " + " to_date('"
+ out_time + "', 'dd/mm/yyyy hh:mi:ss AM'), '" + prod_n
+ "', '" + body_n + "', " + " '" + car_n + "', '"
+ fire_n + "', '" + user_cd + "',to_date('"+ora_sysdt+"', 'dd/mm/yyyy HH24:MI:SS'), " + " 'CGE', '" + tot_qty + "'"
+ " , '"+RSN_N+"' ) " + " ";
//SQL MD20230302
query_th_sql = " INSERT INTO PROD.PR_OPR_TH " + " ( "
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, MCH_N, SHIFT_N, STRT_TIME, "
+ " END_TIME, PROD_N, BODY_N, "
+ " CAR_N , FIRE_N, CREATED_UID," + " CREATED_D , " +
// " UPDATED_UID, UPDATED_D" +
" TRNTYP , TOT_QTY " + " , RSN_N, FLAG) " + " VALUES " + " ( "
+ " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " PROD.to_date('" + trn_d
+ "', 'dd/mm/yyyy') , '" + mch_nm
+ "', '" + shift + "', PROD.to_date('" + in_time
+ "', 'dd/mm/yyyy hh:mi:ss AM'), " + " PROD.to_date('"
+ out_time + "', 'dd/mm/yyyy hh:mi:ss AM'), '" + prod_n
+ "', '" + body_n + "', " + " '" + car_n + "', '"
+ fire_n + "', '" + user_cd + "', PROD.to_date('" + sysdt
+ "', 'dd/mm/yyyy hh:mi:ss AM'), " + " 'CGE', '" + tot_qty + "'"
+ " , '"+RSN_N_SQL+"', 'Y' ) " ;
//ORA
query_td_ora = "INSERT INTO PR_OPR_TD" + " ("
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, TRNDTL_N, SRNO_C, QTY, SMPL_RMK, "
+ " OPR_N, OPRGRP_N, NXT_OPR, REJTYP_N, "
+ " REJ_QTY, STATUS, SRNO_N, DECK_NO, "
+ " CREATED_UID , CREATED_D , " +
" TRNTYP, PREV_OPR, GOOD_QTY, PREV_STATUS, "
+ " BODY_N, BARCODE_NO, PREVTRNDTL_N, PROD_N, " + "" +
" glzsrno_c, good_wt, exttrn_d," +
" glztrn_d, unit_wt, layer_n, zones_n, SOTTRN_D, ASSBLD_STS" +
" )" + " VALUES"
+ "(" + " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " to_date('" + trn_d
+ "', 'dd/mm/yyyy'), '" + trndtl_n + "', '" + srno_c + "', '" + accept_qty
+ "', '" + barcode_no + "', " + " '" + OPR_N + "', '"
+ OPRGRP_N + "', '" + NXT_OPR + "', '" + REJTYP_N + "', "
+ " '" + rej_qty + "', '" + status + "', '" + srno_n
+ "', '" + deck_no + "', " + " '" + user_cd
+ "', to_date('"+ora_sysdt+"', 'dd/mm/yyyy HH24:MI:SS'), "
+ " 'CGE', '" + opr_n + "', '" + good_qty + "', '"
+ PREV_STATUS + "', " + " '" + body_n + "', '"
+ barcode_no + "', '" + TRNDTL_N + "'" + " , '"+prod_n+"', " +
" '" + glzsrno_c + "', '" + good_wt + "', to_date('" + exttrn_d + "' , 'dd/mm/yyyy'), " +
" to_date('" + glztrn_d + "' , 'dd/mm/yyyy'), '" + unit_wt + "', '" + layer_n + "', " +
" '" + zones_n + "', to_date('"+SOTTRN_D+"', 'dd/mm/yyyy'),'"+ASSBLD_STS+"' " +
")";
//SQL MD20230302
query_td_sql = "INSERT INTO PROD.PR_OPR_TD" + " ("
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, TRNDTL_N, SRNO_C, QTY, SMPL_RMK, "
+ " OPR_N, OPRGRP_N, NXT_OPR, REJTYP_N, "
+ " REJ_QTY, STATUS, SRNO_N, DECK_NO, "
+ " CREATED_UID , CREATED_D , " +
" TRNTYP, PREV_OPR, GOOD_QTY, PREV_STATUS, "
+ " BODY_N, BARCODE_NO, PREVTRNDTL_N, PROD_N, " + "" +
" glzsrno_c, good_wt, exttrn_d," +
" glztrn_d, unit_wt, layer_n, zones_n, FLAG, SOTTRN_D, ASSBLD_STS" +
" )" + " VALUES"
+ "(" + " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " PROD.to_date('" + trn_d
+ "', 'dd/mm/yyyy'), '" + trndtl_n + "', '" + srno_c + "', '" + accept_qty
+ "', '" + barcode_no + "', " + " '" + OPR_N + "', '"
+ OPRGRP_N + "', '" + NXT_OPR + "', '" + REJTYP_N_SQL + "', "
+ " '" + rej_qty + "', '" + status + "', '" + srno_n
+ "', '" + deck_no + "', " + " '" + user_cd
+ "', PROD.to_date('" + sysdt + "', 'dd/mm/yyyy hh:mi:ss AM'), "
+ " 'CGE', '" + opr_n + "', '" + good_qty + "', '"
+ PREV_STATUS + "', " + " '" + body_n + "', '"
+ barcode_no + "', '" + TRNDTL_N + "'" + " , '"+prod_n+"', " +
" '" + glzsrno_c + "', '" + good_wt + "', PROD.to_date('" + exttrn_d + "' , 'dd/mm/yyyy'), " +
" PROD.to_date('" + glztrn_d + "' , 'dd/mm/yyyy'), '" + unit_wt + "', '" + layer_n + "', " +
" '" + zones_n + "', 'Y', PROD.to_date('"+SOTTRN_D+"', 'dd/mm/yyyy'), '"+ASSBLD_STS+"' "
+")";
//System.out.println(query_th_ora);
stmt_ora1.executeUpdate(query_th_ora);
//System.out.println(query_th_sql);
stmt3.executeUpdate(query_th_sql);
//System.out.println(query_td_ora);
stmt_ora1.executeUpdate(query_td_ora);
//System.out.println(query_td_sql);
stmt3.executeUpdate(query_td_sql);
}
catch (SQLException e)
{
dbcon.rollback();
dbcon_sql.rollback();
e.printStackTrace();
}
catch (Exception e)
{
dbcon.rollback();
dbcon_sql.rollback();
e.printStackTrace();
}
}
}
And some where in between Business Logic method I always got that exception.
And strange thing is that I always got this exception in my servlets only never in Databean.
I know the why this exception is raise but I don't understand the cause.
And second thing My tomcat service get also hang intermittently.
become completely unresponsive, need to restr in order to run the application again.
So request to all of u to please respond my query/que/issue and help me to get out of this mud bag. One thing to mention is my client machines runs on WiFi network, does it has any effect on the raising this issue?
Thanks a lot in advance
you can get this exception when try to use the PreparedStatemen while its close
This id detailed in this question