Commit 06ad2fba authored by Ajit Deshmukh's avatar Ajit Deshmukh

Closed the open connections.

parent 491e6f9a
...@@ -2277,359 +2277,395 @@ ...@@ -2277,359 +2277,395 @@
* in the ENTERPRISE table). * in the ENTERPRISE table).
*/ */
private void executeAndLog( private void executeAndLog(
String schemaName, String schemaName,
String inputSql, String inputSql,
String tranId, String tranId,
String enterpriseCode, String enterpriseCode,
String linNo, String linNo,
String requestID, String requestID,
String userId, String userId,
String chgTerm, String chgTerm,
String dbMainSchema, String dbMainSchema,
String execRights, String execRights,
boolean rethrow) throws Exception { boolean rethrow) throws Exception {
Connection conn = null; Connection conn = null;
Connection connForQueryExec = null; Connection connForQueryExec = null;
Connection connForSchema = null; Connection connForSchema = null;
ConnDriver connDriverForSchema = new ConnDriver(); ConnDriver connDriverForSchema = new ConnDriver();
ConnDriver connDriver = new ConnDriver(); ConnDriver connDriver = new ConnDriver();
ConnDriver connDriver1 = new ConnDriver(); ConnDriver connDriver1 = new ConnDriver();
String connForExec = ""; String connForExec = "";
String schemaForPlaceHolder = ""; String schemaForPlaceHolder = "";
BaseLogger.log("3", null, null, "executeAndLog dbMainSchema: [" + dbMainSchema + "]"); BaseLogger.log("3", null, null, "executeAndLog dbMainSchema: [" + dbMainSchema + "]");
BaseLogger.log("3", null, null, "executeAndLog inputSql: [" + inputSql + "]"); BaseLogger.log("3", null, null, "executeAndLog inputSql: [" + inputSql + "]");
BaseLogger.log("3", null, null, "executeAndLog execRights: [" + execRights + "]"); BaseLogger.log("3", null, null, "executeAndLog execRights: [" + execRights + "]");
BaseLogger.log("3", null, null, "executeAndLog schemaName: [" + schemaName + "]"); BaseLogger.log("3", null, null, "executeAndLog schemaName: [" + schemaName + "]");
try { try {
conn = connDriver1.getConnectDB("Driver");
} catch (Exception e) { try {
System.out.println("Catch block for connection failed...." + e.getMessage()); conn = connDriver1.getConnectDB("Driver");
String error = e.getMessage(); } catch (Exception e) {
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm, error, ""); System.out.println("Catch block for connection failed...." + e.getMessage());
return; // Stop execution if connection fails String error = e.getMessage();
} logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm, error,
// Changes by Ajit D. on 08-JUNE-26 for the query execution schema name fetched "");
// it return; // Stop execution if connection fails
// from USERS }
// Changes by Ajit D. on 08-JUNE-26 for the query execution schema name fetched
BaseLogger.log("3", null, null, "For schemaName: [" + schemaName + "]"); // it
BaseLogger.log("3", null, null, "executeAndLog inputSql: [" + inputSql + "]"); // from USERS
String dbReadForCheck = "";
/*
* Fetch DB_READ for the current enterprise
*/
String dbReadSql = "SELECT DB_READ FROM ENTERPRISE WHERE ENTERPRISE = ?";
PreparedStatement dbReadPs = conn.prepareStatement(dbReadSql);
dbReadPs.setString(1, enterpriseCode);
ResultSet dbReadRs = dbReadPs.executeQuery();
if (dbReadRs.next()) {
dbReadForCheck = checkNull(dbReadRs.getString("DB_READ"));
}
BaseLogger.log(
"3",
null,
null,
"DB_READ fetched from enterprise : [" + dbReadForCheck + "]");
/*
* For DB_READ use configured value directly.
* For all other schemas fetch actual Oracle USER.
*/
if (schemaName.equalsIgnoreCase(dbReadForCheck)) {
schemaForPlaceHolder = schemaName;
BaseLogger.log(
"3",
null,
null,
"Using DB_READ directly as schema : ["
+ schemaForPlaceHolder + "]");
} else {
try{
connForSchema = connDriverForSchema.getConnectDB(schemaName);
}catch (Exception e) {
String error = (e.getMessage() != null)
? e.getMessage()
: e.toString();
System.out.println("Catch block for executeAndLog method for creating connection 1...." + error);
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm, error, "");
}
System.out.println(
"connForSchema USER ::: "
+ connForSchema.getMetaData().getUserName());
System.out.println(
"connForSchema URL ::: "
+ connForSchema.getMetaData().getURL());
String schemaSql = "SELECT USER FROM DUAL";
PreparedStatement schemaForPs = connForSchema.prepareStatement(schemaSql);
ResultSet schemaForRs = schemaForPs.executeQuery(); BaseLogger.log("3", null, null, "For schemaName: [" + schemaName + "]");
BaseLogger.log("3", null, null, "executeAndLog inputSql: [" + inputSql + "]");
String dbReadForCheck = "";
if (schemaForRs.next()) { /*
schemaForPlaceHolder = checkNull(schemaForRs.getString(1)); * Fetch DB_READ for the current enterprise
} */
String dbReadSql = "SELECT DB_READ FROM ENTERPRISE WHERE ENTERPRISE = ?";
BaseLogger.log( PreparedStatement dbReadPs = conn.prepareStatement(dbReadSql);
"3",
null,
null,
"Actual Oracle USER : ["
+ schemaForPlaceHolder + "]");
}
if (schemaName.equalsIgnoreCase("APPVIS") || schemaName.equalsIgnoreCase("APPVISQC")) { dbReadPs.setString(1, enterpriseCode);
BaseLogger.log(
"3",
null,
null,
"For std database");
schemaForPlaceHolder = "APPVIS";
}
BaseLogger.log(
"3",
null,
null,
"schemaForPlaceHolder : ["
+ schemaForPlaceHolder + "]");
String finalSql = applySchema(inputSql, schemaForPlaceHolder); ResultSet dbReadRs = dbReadPs.executeQuery();
// Change by Gagan B. on 16-JAN-26 if (dbReadRs.next()) {
finalSql = finalSql.trim(); dbReadForCheck = checkNull(dbReadRs.getString("DB_READ"));
}
BaseLogger.log("3", null, null, ">>> EXECUTING SQL finalSql : [" + finalSql + "]");
BaseLogger.log("3", null, null, "executeAndLog schemaName: [" + schemaName + "]");
BaseLogger.log("3", null, null, "executeAndLog dbMainSchema: [" + dbMainSchema + "]");
BaseLogger.log("3", null, null, "executeAndLog enterpriseCode: [" + enterpriseCode + "]");
String execSchema = schemaName;
String sqlUpper = finalSql.trim().toUpperCase();
if (sqlUpper.startsWith("CREATE SYNONYM") BaseLogger.log(
|| sqlUpper.startsWith("GRANT SELECT ON") "3",
|| sqlUpper.startsWith("GRANT EXECUTE ON")) { null,
execSchema = dbMainSchema; null,
} "DB_READ fetched from enterprise : [" + dbReadForCheck + "]");
/*
* For DB_READ use configured value directly.
* For all other schemas fetch actual Oracle USER.
*/
if (schemaName.equalsIgnoreCase(dbReadForCheck)) {
schemaForPlaceHolder = schemaName;
BaseLogger.log(
"3",
null,
null,
"Using DB_READ directly as schema : ["
+ schemaForPlaceHolder + "]");
} else {
try {
connForSchema = connDriverForSchema.getConnectDB(schemaName);
} catch (Exception e) {
String error = (e.getMessage() != null)
? e.getMessage()
: e.toString();
System.out
.println("Catch block for executeAndLog method for creating connection 1...." + error);
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm,
error, "");
return;
}
System.out.println("execSchema:: " + execSchema); System.out.println(
System.out.println("enterpriseCode:: " + enterpriseCode); "connForSchema USER ::: "
+ connForSchema.getMetaData().getUserName());
//Comment out this part as for creating connection for Live schema does not need to use schema_name value instead use db_main value directly[26-June-2026]
// 1. Get the Connection String for the Main Execution
/*
String connForExecSql = "select schema_name from enterprise where enterprise = ?";
PreparedStatement connForExecPstmt = conn.prepareStatement(connForExecSql);
connForExecPstmt.setString(1, enterpriseCode);
ResultSet connForExecRs = connForExecPstmt.executeQuery();
while (connForExecRs.next()) {
System.out.println(
"EXECUTION CONNECTION USER ::: "
+ connForExecRs.getString(1));
connForExec = connForExecRs.getString("schema_name");
}
*/
connForExec = schemaName; System.out.println(
System.out.println("connForExec:: " + connForExec); "connForSchema URL ::: "
+ connForSchema.getMetaData().getURL());
String schemaSql = "SELECT USER FROM DUAL";
try { PreparedStatement schemaForPs = connForSchema.prepareStatement(schemaSql);
// Connect to the specific schema
connForQueryExec = connDriver.getConnectDB(connForExec);
System.out.println(
"CONNECTED USER ::: "
+ connForQueryExec.getMetaData().getUserName());
System.out.println(
"CONNECTED URL ::: "
+ connForQueryExec.getMetaData().getURL());
} catch (Exception e) {
String error = (e.getMessage() != null)
? e.getMessage()
: e.toString();
System.out.println("Catch block for executeAndLog method for creating connection...." + error);
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm, error, "");
} ResultSet schemaForRs = schemaForPs.executeQuery();
int updCount = 0; if (schemaForRs.next()) {
String error = null; schemaForPlaceHolder = checkNull(schemaForRs.getString(1));
}
try { BaseLogger.log(
System.out.println("\n===================="); "3",
System.out.println("FINAL EXECUTION CHECK"); null,
System.out.println("===================="); null,
"Actual Oracle USER : ["
+ schemaForPlaceHolder + "]");
schemaForRs.close();
schemaForPs.close();
}
System.out.println("schemaName ::: " + schemaName); if (schemaName.equalsIgnoreCase("APPVIS") || schemaName.equalsIgnoreCase("APPVISQC")) {
System.out.println("dbMainSchema ::: " + dbMainSchema); BaseLogger.log(
System.out.println("connForExec ::: " + connForExec); "3",
null,
null,
"For std database");
schemaForPlaceHolder = "APPVIS";
}
BaseLogger.log(
"3",
null,
null,
"schemaForPlaceHolder : ["
+ schemaForPlaceHolder + "]");
String finalSql = applySchema(inputSql, schemaForPlaceHolder);
// Change by Gagan B. on 16-JAN-26
finalSql = finalSql.trim();
BaseLogger.log("3", null, null, ">>> EXECUTING SQL finalSql : [" + finalSql + "]");
BaseLogger.log("3", null, null, "executeAndLog schemaName: [" + schemaName + "]");
BaseLogger.log("3", null, null, "executeAndLog dbMainSchema: [" + dbMainSchema + "]");
BaseLogger.log("3", null, null, "executeAndLog enterpriseCode: [" + enterpriseCode + "]");
String execSchema = schemaName;
String sqlUpper = finalSql.trim().toUpperCase();
if (sqlUpper.startsWith("CREATE SYNONYM")
|| sqlUpper.startsWith("GRANT SELECT ON")
|| sqlUpper.startsWith("GRANT EXECUTE ON")) {
execSchema = dbMainSchema;
}
System.out.println( System.out.println("execSchema:: " + execSchema);
"EXECUTION USER ::: " System.out.println("enterpriseCode:: " + enterpriseCode);
+ connForQueryExec.getMetaData().getUserName());
// Comment out this part as for creating connection for Live schema does not
// need to use schema_name value instead use db_main value
// directly[26-June-2026]
// 1. Get the Connection String for the Main Execution
/*
* String connForExecSql =
* "select schema_name from enterprise where enterprise = ?";
* PreparedStatement connForExecPstmt = conn.prepareStatement(connForExecSql);
* connForExecPstmt.setString(1, enterpriseCode);
* ResultSet connForExecRs = connForExecPstmt.executeQuery();
* while (connForExecRs.next()) {
* System.out.println(
* "EXECUTION CONNECTION USER ::: "
* + connForExecRs.getString(1));
* connForExec = connForExecRs.getString("schema_name");
* }
*/
connForExec = schemaName;
System.out.println("connForExec:: " + connForExec);
try {
// Connect to the specific schema
connForQueryExec = connDriver.getConnectDB(connForExec);
System.out.println(
"CONNECTED USER ::: "
+ connForQueryExec.getMetaData().getUserName());
System.out.println(
"CONNECTED URL ::: "
+ connForQueryExec.getMetaData().getURL());
} catch (Exception e) {
String error = (e.getMessage() != null)
? e.getMessage()
: e.toString();
System.out.println("Catch block for executeAndLog method for creating connection...." + error);
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm, error,
"");
System.out.println( }
"EXECUTION URL ::: "
+ connForQueryExec.getMetaData().getURL());
PreparedStatement psCheck = connForQueryExec.prepareStatement( int updCount = 0;
"SELECT USER FROM DUAL"); String error = null;
ResultSet rsCheck = psCheck.executeQuery(); try {
System.out.println("\n====================");
System.out.println("FINAL EXECUTION CHECK");
System.out.println("====================");
if (rsCheck.next()) { System.out.println("schemaName ::: " + schemaName);
System.out.println( System.out.println("dbMainSchema ::: " + dbMainSchema);
"SELECT USER FROM DUAL ::: " System.out.println("connForExec ::: " + connForExec);
+ rsCheck.getString(1));
}
rsCheck.close(); System.out.println(
psCheck.close(); "EXECUTION USER ::: "
+ connForQueryExec.getMetaData().getUserName());
System.out.println("FINAL SQL ::: "); System.out.println(
System.out.println(finalSql); "EXECUTION URL ::: "
System.out.println("====================\n"); + connForQueryExec.getMetaData().getURL());
Statement stmt = connForQueryExec.createStatement();
if (isTrigger(finalSql) || isDdl(finalSql)) { PreparedStatement psCheck = connForQueryExec.prepareStatement(
// --- A. Execute the Main DDL (DROP TABLE/VIEW/SEQ) --- "SELECT USER FROM DUAL");
stmt.execute(finalSql);
// --- B. Handle DROP SYNONYM Logic using Enterprise Config --- ResultSet rsCheck = psCheck.executeQuery();
if (sqlUpper.startsWith("DROP ")) {
PreparedStatement psEnt = null;
ResultSet rsEnt = null;
String dbRead = null;
try { if (rsCheck.next()) {
// 1. Extract Object Name from SQL (e.g., TESTMANGESQL1) System.out.println(
String objName = getObjectNameFromDrop(finalSql); "SELECT USER FROM DUAL ::: "
+ rsCheck.getString(1));
if (objName != null) { }
// Clean up object name
objName = objName.replace("\"", "").trim();
// 2. Query ENTERPRISE table to get DB_READ schema
// We use 'conn' (the Driver connection) which has access to the enterprise
// table
String query = "SELECT DB_READ FROM enterprise WHERE enterprise = ?";
psEnt = conn.prepareStatement(query);
psEnt.setString(1, enterpriseCode);
rsEnt = psEnt.executeQuery();
if (rsEnt.next()) {
dbRead = rsEnt.getString("DB_READ");
}
// 3. Construct and Execute DROP SYNONYM rsCheck.close();
if (dbRead != null && !dbRead.isEmpty()) { psCheck.close();
// Construct: DROP SYNONYM APPVISREAD.TESTMANGESQL1
String dropSynSql = "DROP SYNONYM " + dbRead + "." + objName; System.out.println("FINAL SQL ::: ");
System.out.println(finalSql);
System.out.println("====================\n");
Statement stmt = connForQueryExec.createStatement();
if (isTrigger(finalSql) || isDdl(finalSql)) {
// --- A. Execute the Main DDL (DROP TABLE/VIEW/SEQ) ---
stmt.execute(finalSql);
// --- B. Handle DROP SYNONYM Logic using Enterprise Config ---
if (sqlUpper.startsWith("DROP ")) {
PreparedStatement psEnt = null;
ResultSet rsEnt = null;
String dbRead = null;
try {
// 1. Extract Object Name from SQL (e.g., TESTMANGESQL1)
String objName = getObjectNameFromDrop(finalSql);
if (objName != null) {
// Clean up object name
objName = objName.replace("\"", "").trim();
// 2. Query ENTERPRISE table to get DB_READ schema
// We use 'conn' (the Driver connection) which has access to the enterprise
// table
String query = "SELECT DB_READ FROM enterprise WHERE enterprise = ?";
psEnt = conn.prepareStatement(query);
psEnt.setString(1, enterpriseCode);
rsEnt = psEnt.executeQuery();
if (rsEnt.next()) {
dbRead = rsEnt.getString("DB_READ");
}
// 3. Construct and Execute DROP SYNONYM
if (dbRead != null && !dbRead.isEmpty()) {
// Construct: DROP SYNONYM APPVISREAD.TESTMANGESQL1
String dropSynSql = "DROP SYNONYM " + dbRead + "." + objName;
System.out.println(
"Attempting to drop related synonym via Enterprise Config: "
+ dropSynSql);
// Execute blindly. If it doesn't exist, we catch the exception.
stmt.execute(dropSynSql);
System.out.println("Synonym dropped successfully.");
} else {
System.out.println(
"Skipping synonym drop: DB_READ not found in Enterprise table.");
}
}
} catch (SQLException synEx) {
// Swallow exception specifically for synonym drop
// (e.g., ORA-01434: synonym does not exist)
System.out.println("Synonym drop skipped or failed (non-fatal): " + synEx.getMessage());
} catch (Exception ex) {
System.out.println("Error in synonym logic: " + ex.getMessage());
} finally {
if (rsEnt != null)
try {
rsEnt.close();
} catch (Exception e) {
}
if (psEnt != null)
try {
psEnt.close();
} catch (Exception e) {
}
}
}
// --- END SYNONYM LOGIC ---
} else {
// INSERT / UPDATE / DELETE
updCount = stmt.executeUpdate(finalSql);
connForQueryExec.commit();
}
System.out.println( logSqlExecution(
"Attempting to drop related synonym via Enterprise Config: " + dropSynSql); tranId, enterpriseCode, linNo, requestID,
finalSql, updCount, "C", userId, chgTerm, null, dbMainSchema);
// Execute blindly. If it doesn't exist, we catch the exception. } catch (SQLException e) {
stmt.execute(dropSynSql);
System.out.println("Synonym dropped successfully.");
} else {
System.out.println("Skipping synonym drop: DB_READ not found in Enterprise table.");
}
}
} catch (SQLException synEx) {
// Swallow exception specifically for synonym drop
// (e.g., ORA-01434: synonym does not exist)
System.out.println("Synonym drop skipped or failed (non-fatal): " + synEx.getMessage());
} catch (Exception ex) {
System.out.println("Error in synonym logic: " + ex.getMessage());
} finally {
if (rsEnt != null)
try {
rsEnt.close();
} catch (Exception e) {
}
if (psEnt != null)
try {
psEnt.close();
} catch (Exception e) {
}
} try {
} if (connForQueryExec != null)
// --- END SYNONYM LOGIC --- connForQueryExec.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
} else { error = e.getMessage();
// INSERT / UPDATE / DELETE
updCount = stmt.executeUpdate(finalSql);
connForQueryExec.commit();
}
logSqlExecution( System.out.println("================================");
tranId, enterpriseCode, linNo, requestID, System.out.println("SQL EXECUTION FAILED");
finalSql, updCount, "C", userId, chgTerm, null, dbMainSchema); System.out.println("Oracle Error : " + error);
System.out.println("Schema Name : " + schemaName);
System.out.println("connForExec : " + connForExec);
} catch (SQLException e) { if (connForQueryExec != null) {
System.out.println(
"Connected User : "
+ connForQueryExec.getMetaData().getUserName());
try { System.out.println(
if (connForQueryExec != null) "Connected URL : "
connForQueryExec.rollback(); + connForQueryExec.getMetaData().getURL());
} catch (SQLException e1) { }
e1.printStackTrace();
}
error = e.getMessage(); System.out.println("Failed SQL : ");
System.out.println(finalSql);
System.out.println("================================");
logSqlExecution(
tranId, enterpriseCode, linNo, requestID,
finalSql, updCount, "E", userId, chgTerm, error, dbMainSchema);
} finally {
// if (connForExecRs != null)
// connForExecRs.close();
// if (connForExecPstmt != null)
// connForExecPstmt.close();
if (connForQueryExec != null)
connForQueryExec.close();
if (conn != null)
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("================================"); try {
System.out.println("SQL EXECUTION FAILED");
System.out.println("Oracle Error : " + error);
System.out.println("Schema Name : " + schemaName);
System.out.println("connForExec : " + connForExec);
if (connForQueryExec != null) { if (connForSchema != null && !connForSchema.isClosed()) {
System.out.println( connForSchema.close();
"Connected User : " connForSchema = null;
+ connForQueryExec.getMetaData().getUserName()); }
System.out.println( if (connForQueryExec != null && !connForQueryExec.isClosed()) {
"Connected URL : " connForQueryExec.close();
+ connForQueryExec.getMetaData().getURL()); connForQueryExec = null;
} }
System.out.println("Failed SQL : "); if (conn != null && !conn.isClosed()) {
System.out.println(finalSql); conn.close();
System.out.println("================================"); conn = null;
}
logSqlExecution( } catch (Exception e) {
tranId, enterpriseCode, linNo, requestID, e.printStackTrace();
finalSql, updCount, "E", userId, chgTerm, error, dbMainSchema); }
} finally { }
// if (connForExecRs != null) }
// connForExecRs.close();
// if (connForExecPstmt != null)
// connForExecPstmt.close();
if (connForQueryExec != null)
connForQueryExec.close();
if (conn != null)
conn.close();
}
}
private boolean isDdl(String sql) { private boolean isDdl(String sql) {
String s = sql.trim().toUpperCase(); String s = sql.trim().toUpperCase();
...@@ -3071,4 +3107,4 @@ ...@@ -3071,4 +3107,4 @@
return null; return null;
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment