Files
HRMS/hrmsEjb/wenrgise/ejb/common/utility/DBUtilitiesBean.java
2025-07-28 13:56:49 +05:30

612 lines
20 KiB
Java

package wenrgise.ejb.common.utility;
import java.sql.BatchUpdateException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Iterator;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import wenrgise.common.exception.EnrgiseSystemException;
import wenrgise.ejb.common.helper.DBObject;
import wenrgise.ejb.common.helper.InputDBObject;
import wenrgise.ejb.common.helper.QueryRow;
import wenrgise.ejb.common.helper.QueryValue;
public class DBUtilitiesBean {
private String sDbName = "jdbc/conDS";
private ArrayList oOutParameters = null;
private Connection oCon;
private ResultSet oRs;
private Connection oConn = null;
private DataSource oDataSource = null;
private PreparedStatement oDynamicBatchCall = null;
private CallableStatement oBatchCall = null;
private Connection oBatchCon = null;
private Connection oPreParameterCon = null;
private PreparedStatement oPreParameter = null;
private Connection oPreUpsertCon = null;
private PreparedStatement oPreUpsert = null;
private boolean bDynamic = false;
public DBUtilitiesBean() {}
public DBUtilitiesBean(boolean bDynamic) {
this.bDynamic = bDynamic;
}
public void createBatch(String sProcName) throws EnrgiseSystemException {
InitialContext oInitCont = null;
String sParam = String.valueOf(String.valueOf("{ call ").concat(String.valueOf(sProcName))).concat(String.valueOf("}"));
boolean bCreateCoonectionError = false;
try {
Object dataSourceObj = ServiceLocator.getLocator().getLocalService(this.sDbName);
this.oDataSource = (DataSource)dataSourceObj;
this.oBatchCon = this.oDataSource.getConnection();
bCreateCoonectionError = true;
if (!this.bDynamic) {
if (this.oBatchCall != null) {
this.oBatchCall.close();
this.oBatchCall = null;
}
this.oBatchCall = this.oBatchCon.prepareCall(sParam);
bCreateCoonectionError = false;
} else {
if (this.oDynamicBatchCall != null) {
this.oDynamicBatchCall.close();
this.oDynamicBatchCall = null;
}
this.oDynamicBatchCall = this.oBatchCon.prepareStatement(sParam);
bCreateCoonectionError = false;
}
} catch (SQLException oExc) {
System.out.println(oExc.getMessage());
throw new EnrgiseSystemException(oExc);
} finally {
try {
if (this.oBatchCon != null && bCreateCoonectionError) {
if (!this.oBatchCon.isClosed())
this.oBatchCon.close();
this.oBatchCon = null;
}
} catch (SQLException sQLException) {}
}
}
public void addToBatch(ArrayList oParameters) throws EnrgiseSystemException {
if (!this.bDynamic) {
addToProcBatch(oParameters);
} else {
addToDynamicBatch(oParameters);
}
}
private void addToDynamicBatch(ArrayList oParameters) throws EnrgiseSystemException {
try {
Iterator oIter = oParameters.iterator();
while (oIter.hasNext()) {
InputDBObject oObject = oIter.next();
inspectExecuteParameter(oObject, this.oDynamicBatchCall);
}
this.oBatchCall.addBatch();
} catch (SQLException oSqlEx) {
System.out.println(oSqlEx.getMessage());
throw new EnrgiseSystemException(oSqlEx);
} finally {
try {
if (this.oBatchCon != null) {
if (!this.oBatchCon.isClosed())
this.oBatchCon.close();
this.oBatchCon = null;
}
} catch (SQLException sQLException) {}
}
}
private void addToProcBatch(ArrayList oParameters) throws EnrgiseSystemException {
try {
Iterator oIter = oParameters.iterator();
while (oIter.hasNext()) {
DBObject oObject = oIter.next();
inspectParameter(oObject, this.oBatchCall);
}
this.oBatchCall.addBatch();
} catch (SQLException oSqlEx) {
oSqlEx.printStackTrace();
System.out.println(oSqlEx.getMessage());
try {
if (this.oBatchCon != null)
if (!this.oBatchCon.isClosed())
this.oBatchCon.close();
this.oBatchCon = null;
} catch (SQLException sQLException) {}
throw new EnrgiseSystemException(oSqlEx);
}
}
public void executeBatch() throws EnrgiseSystemException {
try {
if (!this.bDynamic) {
this.oBatchCall.executeBatch();
} else {
this.oDynamicBatchCall.executeBatch();
}
} catch (BatchUpdateException oBatchEx) {
System.out.println("Batch Update Failed");
System.out.println(String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf("Casue ").concat(String.valueOf(oBatchEx.getCause()))).concat(String.valueOf(" Message "))).concat(String.valueOf(oBatchEx.getMessage()))).concat(String.valueOf(" SQL State "))).concat(String.valueOf(oBatchEx.getSQLState()))).concat(String.valueOf(" Update Count "))).concat(String.valueOf(oBatchEx.getUpdateCounts()))).concat(String.valueOf(" SQL Trace "))).concat(String.valueOf(oBatchEx.getStackTrace())));
throw new EnrgiseSystemException(oBatchEx);
} catch (SQLException oSqlEx) {
System.out.println(String.valueOf("dbutilities").concat(String.valueOf(oSqlEx.getMessage())));
oSqlEx.printStackTrace();
throw new EnrgiseSystemException(oSqlEx);
} finally {
try {
if (this.oBatchCon != null)
if (!this.oBatchCon.isClosed())
this.oBatchCon.close();
} catch (SQLException sQLException) {}
}
}
public int executeUpsert(ArrayList oParameters, String sQuery) throws EnrgiseSystemException {
int iCount = 0;
try {
this.oDataSource = (DataSource)ServiceLocator.getLocator().getLocalService(this.sDbName);
if (this.oPreUpsert != null)
this.oPreUpsert.close();
if (this.oPreUpsertCon != null) {
this.oPreUpsertCon.close();
this.oPreUpsertCon = null;
}
this.oPreUpsertCon = this.oDataSource.getConnection();
this.oPreUpsert = this.oPreUpsertCon.prepareStatement(sQuery);
Iterator oIter = oParameters.iterator();
while (oIter.hasNext()) {
InputDBObject oObject = oIter.next();
inspectExecuteParameter(oObject, this.oPreUpsert);
}
iCount = this.oPreUpsert.executeUpdate();
while (true);
} catch (Exception oExc) {
System.out.println(oExc.getMessage());
oExc.printStackTrace();
throw new EnrgiseSystemException(oExc);
} finally {
try {
if (this.oPreUpsertCon != null) {
if (!this.oPreUpsertCon.isClosed())
this.oPreUpsertCon.close();
this.oPreUpsertCon = null;
}
} catch (SQLException oSqlEx) {
System.out.println(oSqlEx.getMessage());
throw new EnrgiseSystemException(oSqlEx);
}
return iCount;
}
}
public ArrayList executeQuery(ArrayList oParameters, String sQuery) throws EnrgiseSystemException {
ResultSet oRs = null;
ArrayList oResult = null;
try {
this.oDataSource = (DataSource)ServiceLocator.getLocator().getLocalService(this.sDbName);
if (oRs != null) {
oRs.close();
oRs = null;
}
if (this.oPreParameter != null)
this.oPreParameter.close();
if (this.oPreParameterCon != null) {
this.oPreParameterCon.close();
this.oPreParameterCon = null;
}
this.oPreParameterCon = this.oDataSource.getConnection();
this.oPreParameter = this.oPreParameterCon.prepareStatement(sQuery);
Iterator oIter = oParameters.iterator();
while (oIter.hasNext()) {
InputDBObject oObject = oIter.next();
inspectExecuteParameter(oObject, this.oPreParameter);
}
oRs = this.oPreParameter.executeQuery();
if (oRs == null)
throw new EnrgiseSystemException();
oResult = convertToList(oRs);
while (true);
} catch (Exception oExc) {
System.out.println(oExc.getMessage());
oExc.printStackTrace();
throw new EnrgiseSystemException(oExc);
} finally {
try {
if (this.oPreParameterCon != null)
if (this.oPreParameterCon.isClosed())
this.oPreParameterCon.close();
} catch (SQLException oSqlEx) {
System.out.println(oSqlEx.getMessage());
throw new EnrgiseSystemException(oSqlEx);
}
return oResult;
}
}
public ArrayList callProc(ArrayList oParameters, String sProcName) throws EnrgiseSystemException {
CallableStatement oCall = null;
if (this.oOutParameters == null) {
this.oOutParameters = new ArrayList();
} else {
this.oOutParameters.clear();
}
try {
Object datasourceObj = null;
datasourceObj = ServiceLocator.getLocator().getLocalService(this.sDbName);
this.oDataSource = (DataSource)datasourceObj;
Object conObj = this.oDataSource.getConnection();
this.oCon = (Connection)conObj;
if (oCall != null)
oCall.close();
String sParam = String.valueOf(String.valueOf("{ call ").concat(String.valueOf(sProcName))).concat(String.valueOf("}"));
Object callObj = this.oCon.prepareCall(sParam);
oCall = (CallableStatement)callObj;
Iterator oIter = oParameters.iterator();
while (oIter.hasNext()) {
DBObject oObject = oIter.next();
inspectParameter(oObject, oCall);
}
oCall.execute();
Iterator oOutIter = this.oOutParameters.iterator();
while (oOutIter.hasNext())
getOutParameters(oOutIter.next(), oCall);
if (this.oOutParameters.size() >= 3) {
DBObject oErrLog = this.oOutParameters.get(this.oOutParameters.size() - 3);
String sErrorLog = (String)oErrLog.getObject();
DBObject oErrMessage = this.oOutParameters.get(this.oOutParameters.size() - 2);
String sErrorMessage = (String)oErrLog.getObject();
DBObject oErr = this.oOutParameters.get(this.oOutParameters.size() - 1);
Integer oErrorCode = (Integer)oErr.getObject();
if (null != oErrorCode && !oErrorCode.equals(new Integer(0))) {
System.out.println(String.valueOf("Error calling procedure ").concat(String.valueOf(sProcName)));
if (null != sErrorLog)
System.out.println(String.valueOf("Error Log ").concat(String.valueOf(sErrorLog)));
if (null != sErrorMessage)
System.out.println(String.valueOf("Error Message ").concat(String.valueOf(sErrorMessage)));
throw new EnrgiseSystemException();
}
}
return this.oOutParameters;
} catch (Exception oExc) {
System.out.println(oExc.getMessage());
oExc.printStackTrace();
throw new EnrgiseSystemException(oExc);
} finally {
try {
if (this.oCon != null) {
if (!this.oCon.isClosed())
this.oCon.close();
this.oCon = null;
}
} catch (Exception exception) {}
}
}
public ArrayList executeQuery(String sQuery) throws EnrgiseSystemException {
PreparedStatement oPre = null;
ArrayList oResult = null;
try {
this.oDataSource = (DataSource)ServiceLocator.getLocator().getLocalService(this.sDbName);
if (this.oRs != null) {
this.oRs.close();
this.oRs = null;
}
if (oPre != null)
oPre.close();
if (this.oConn != null) {
this.oConn.close();
this.oConn = null;
}
this.oConn = this.oDataSource.getConnection();
oPre = this.oConn.prepareStatement(sQuery);
this.oRs = oPre.executeQuery();
oResult = convertToList(this.oRs);
while (true);
} catch (SQLException oExc) {
System.out.println(String.valueOf(String.valueOf(String.valueOf("From DBUtility ").concat(String.valueOf(oExc.getClass().getName()))).concat(String.valueOf(" "))).concat(String.valueOf(oExc.getMessage())));
throw new EnrgiseSystemException(oExc);
} finally {
try {
if (this.oConn != null)
if (!this.oConn.isClosed())
this.oConn.close();
} catch (SQLException oSqEx) {
throw new EnrgiseSystemException(oSqEx);
}
return oResult;
}
}
public int executeUpsert(String sQuery) throws EnrgiseSystemException {
PreparedStatement oPre = null;
Connection oPreCon = null;
int iCount = 0;
try {
this.oDataSource = (DataSource)ServiceLocator.getLocator().getLocalService(this.sDbName);
if (oPre != null)
oPre.close();
oPreCon = this.oDataSource.getConnection();
oPre = oPreCon.prepareStatement(sQuery);
iCount = oPre.executeUpdate();
while (true);
} catch (SQLException oExc) {
System.out.println(String.valueOf(String.valueOf(String.valueOf("From DBUtility ").concat(String.valueOf(oExc.getClass().getName()))).concat(String.valueOf(" "))).concat(String.valueOf(oExc.getMessage())));
throw new EnrgiseSystemException(oExc);
} finally {
try {
if (oPreCon != null)
if (!oPreCon.isClosed())
oPreCon.close();
} catch (SQLException oSqEx) {
throw new EnrgiseSystemException(oSqEx);
}
return iCount;
}
}
private void inspectParameter(DBObject oDBObject, CallableStatement oCall) throws SQLException {
int iPosition = oDBObject.getPosition();
int iDirection = oDBObject.getDirection();
int iDataType = oDBObject.getDataType();
if (iDirection == 1 || iDirection == 3) {
Object oObject = oDBObject.getObject();
switch (iDataType) {
case 12:
if (oObject != null) {
oCall.setString(iPosition, oObject.toString());
break;
}
oCall.setString(iPosition, (String)null);
break;
case 4:
if (oObject != null) {
oCall.setInt(iPosition, Integer.parseInt(oObject.toString()));
break;
}
oCall.setInt(iPosition, 0);
break;
case 8:
if (oObject != null) {
oCall.setDouble(iPosition, Double.parseDouble(oObject.toString()));
break;
}
oCall.setDouble(iPosition, 0.0D);
break;
case -5:
if (oObject != null) {
oCall.setLong(iPosition, ((Long)oObject).longValue());
break;
}
oCall.setLong(iPosition, 0L);
break;
case 91:
if (oObject != null) {
oCall.setDate(iPosition, (Date)oObject);
break;
}
oCall.setDate(iPosition, (Date)null);
break;
case 93:
if (oObject != null) {
oCall.setTimestamp(iPosition, (Timestamp)oObject);
break;
}
oCall.setTimestamp(iPosition, (Timestamp)null);
break;
case 2000:
if (oObject != null) {
oCall.setObject(iPosition, oObject);
break;
}
oCall.setObject(iPosition, (Object)null);
break;
}
}
if (iDirection == 2 || iDirection == 3) {
oCall.registerOutParameter(iPosition, iDataType);
this.oOutParameters.add(new DBObject(iPosition, iDataType));
}
}
private void inspectExecuteParameter(InputDBObject oDBObject, PreparedStatement oCall) throws SQLException {
int iPosition = oDBObject.getPosition();
int iDataType = oDBObject.getDataType();
Object oObject = oDBObject.getObject();
switch (iDataType) {
case 12:
if (oObject != null) {
oCall.setString(iPosition, oObject.toString());
break;
}
oCall.setString(iPosition, (String)null);
break;
case 1:
if (oObject != null) {
oCall.setString(iPosition, oObject.toString());
break;
}
oCall.setString(iPosition, (String)null);
break;
case 4:
if (oObject != null) {
oCall.setInt(iPosition, Integer.parseInt(oObject.toString()));
break;
}
oCall.setInt(iPosition, 0);
break;
case 8:
if (oObject != null) {
oCall.setDouble(iPosition, Double.parseDouble(oObject.toString()));
break;
}
oCall.setDouble(iPosition, 0.0D);
break;
case -5:
if (oObject != null) {
oCall.setLong(iPosition, ((Long)oObject).longValue());
break;
}
oCall.setLong(iPosition, 0L);
break;
case 91:
if (oObject != null) {
oCall.setDate(iPosition, (Date)oObject);
break;
}
oCall.setDate(iPosition, (Date)null);
break;
case 93:
if (oObject != null) {
oCall.setTimestamp(iPosition, (Timestamp)oObject);
break;
}
oCall.setTimestamp(iPosition, (Timestamp)null);
break;
case 2000:
oCall.setObject(iPosition, oObject);
break;
}
}
private void getOutParameters(DBObject oOutDBObject, CallableStatement oCall) throws SQLException {
int iPosition = oOutDBObject.getPosition();
int iDataType = oOutDBObject.getDataType();
switch (iDataType) {
case 12:
oOutDBObject.setObject(oCall.getString(iPosition));
break;
case 1:
oOutDBObject.setObject(oCall.getString(iPosition));
break;
case 4:
oOutDBObject.setObject(new Integer(oCall.getInt(iPosition)));
break;
case -5:
oOutDBObject.setObject(new Long(oCall.getLong(iPosition)));
break;
case 8:
oOutDBObject.setObject(new Double(oCall.getDouble(iPosition)));
break;
case 91:
oOutDBObject.setObject(oCall.getDate(iPosition));
break;
case 93:
oOutDBObject.setObject(oCall.getTimestamp(iPosition));
break;
case 2000:
oOutDBObject.setObject(oCall.getObject(iPosition));
break;
case -10:
oOutDBObject.setObject(convertToList((ResultSet)oCall.getObject(iPosition)));
break;
}
}
private ArrayList convertToList(ResultSet oRs2) throws SQLException {
if (null == oRs2)
return null;
ResultSetMetaData oRsMt = oRs2.getMetaData();
int iColumnCount = oRsMt.getColumnCount();
int iIndex = 0;
ArrayList oList = new ArrayList();
String[] sColumnName = new String[iColumnCount];
int[] iColumnType = new int[iColumnCount];
for (iIndex = 0; iIndex < iColumnCount; iIndex++) {
sColumnName[iIndex] = oRsMt.getColumnName(iIndex + 1);
iColumnType[iIndex] = oRsMt.getColumnType(iIndex + 1);
}
while (oRs2.next()) {
QueryRow oRow = new QueryRow(iColumnCount);
for (iIndex = 0; iIndex < iColumnCount; iIndex++) {
QueryValue oValue = new QueryValue();
setValue(sColumnName[iIndex], iColumnType[iIndex], oValue, oRs2);
oRow.getRow().put(sColumnName[iIndex].toUpperCase(), oValue);
}
oList.add(oRow);
}
oRs2.close();
oRs2 = null;
return oList;
}
private void setValue(String sColumnName, int iColumnType, QueryValue oValue, ResultSet oRs2) throws SQLException {
switch (iColumnType) {
case 2:
oValue.setString(oRs2.getString(sColumnName));
break;
case 12:
oValue.setString(oRs2.getString(sColumnName));
break;
case 1:
oValue.setString(oRs2.getString(sColumnName));
break;
case 4:
oValue.setInt(oRs2.getInt(sColumnName));
break;
case -5:
oValue.setLong(oRs2.getLong(sColumnName));
break;
case 8:
oValue.setDouble(oRs2.getDouble(sColumnName));
break;
case 91:
oValue.setDate(oRs2.getDate(sColumnName));
break;
case 93:
oValue.setTimestamp(oRs2.getTimestamp(sColumnName));
break;
case 2004:
oValue.setBlob(oRs2.getBlob(sColumnName));
break;
case 2005:
oValue.setClob(oRs2.getClob(sColumnName));
break;
}
}
protected void finalize() {
try {
close();
} catch (SQLException sQLException) {}
}
private void close() throws SQLException {
if (this.oCon != null) {
if (!this.oCon.isClosed())
this.oCon.close();
this.oCon = null;
}
if (this.oConn != null) {
if (!this.oConn.isClosed())
this.oConn.close();
this.oConn = null;
}
}
}