Skip to content

Commit

Permalink
Enhance the JDBC Driver Manager to validate all driver supported
Browse files Browse the repository at this point in the history
properties and remove the unsupported from the connection properties
  • Loading branch information
speckyspooky committed Aug 3, 2024
1 parent 7585397 commit a40a72e
Showing 1 changed file with 36 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
Expand Down Expand Up @@ -282,6 +283,7 @@ private Connection doConnect(String driverClass, String url, String jndiNameUrl,
try {
Driver driver = DriverManager.getDriver(url);
if (driver != null) {
removeUnsupportedConnectionProperties(driver, url, connectionProperties);
return driver.connect(url, connectionProperties);
}
} catch (SQLException e1) {
Expand All @@ -292,6 +294,7 @@ private Connection doConnect(String driverClass, String url, String jndiNameUrl,
}

try {
removeUnsupportedConnectionProperties(DriverManager.getDriver(url), url, connectionProperties);
return DriverManager.getConnection(url, connectionProperties);
} catch (SQLException e) {
try {
Expand All @@ -301,7 +304,9 @@ private Connection doConnect(String driverClass, String url, String jndiNameUrl,

Class dc = dl.loadClass(driverClass);
if (dc != null) {
Connection conn = ((Driver) dc.newInstance()).connect(url, connectionProperties);
Driver driver = (Driver) dc.newInstance();
removeUnsupportedConnectionProperties(driver, url, connectionProperties);
Connection conn = driver.connect(url, connectionProperties);
if (conn != null) {
return conn;
}
Expand All @@ -313,6 +318,36 @@ private Connection doConnect(String driverClass, String url, String jndiNameUrl,
}
}

/*
* Remove unsupported properties from the connection properties
* based on the driver property information set
*/
private void removeUnsupportedConnectionProperties(Driver driver, String url, Properties connectionProperties) {
try {
DriverPropertyInfo[] supportedProperties = driver.getPropertyInfo(url, connectionProperties);
if (supportedProperties != null && connectionProperties != null) {
ArrayList<String> unsupportedDriverProperties = new ArrayList<String>();
connectionProperties.forEach((key, value) -> {
boolean isPropertySupported = false;
for (DriverPropertyInfo supportedProperty : supportedProperties) {
if (supportedProperty.name.equalsIgnoreCase(key.toString())) {
isPropertySupported = true;
break;
}
}
// registry of unsupported connection properties
if (!isPropertySupported)
unsupportedDriverProperties.add(key.toString());
});

// remove unsupported connection properties
for (String unsupportedProperty : unsupportedDriverProperties)
connectionProperties.remove(unsupportedProperty);
}
} catch (SQLException e) {
// do nothing, standard handling
}
}
/**
*
* @param message
Expand Down

0 comments on commit a40a72e

Please sign in to comment.