import java.nio.channels.SocketChannel;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcSample {
public void directClose(String url) {
DriverManager.getConnection(url).close();
}
public void unclosedConnection(String url) {
Connection connection = DriverManager.getConnection(url); // Noncompliant {{Close this "Connection".}}
Statement statement = connection.createStatement(); // Noncompliant {{Close this "Statement".}}
}
public void unclosedResultSet(String url, String query) {
try (Connection connection = DriverManager.getConnection(url);) {
Statement statement = connection.createStatement(); // Noncompliant {{Close this "Statement".}}
ResultSet result = statement.executeQuery(query); // Noncompliant {{Close this "ResultSet".}}
String name = result.getString(0);
}
}
public void adequateHandling(String url, String query) {
try (Connection connection = DriverManager.getConnection(url);) {
Statement statement = connection.createStatement();
try {
ResultSet result = statement.executeQuery(query);
try {
String name = result.getString(0);
} finally {
result.close();
}
} finally {
statement.close();
}
}
}
public void properHandling(String url, String query) {
try (Connection connection = DriverManager.getConnection(url);) {
try (Statement statement = connection.createStatement();) {
try (ResultSet result = statement.executeQuery(query);) {
String name = result.getString(0);
}
}
}
}
public void properHandlingWithMoreResults(String url, String query) {
try (Connection connection = DriverManager.getConnection(url);) {
try (Statement statement = connection.createStatement();) {
boolean hasResultSets = statement.execute(query);
while (hasResultSets) {
ResultSet result = statement.getResultSet(); // Noncompliant {{Close this "ResultSet".}}
String name = result.getString(0);
hasResultSets = statement.getMoreResults();
}
}
}
}
// The 4 methods below are testing the pattern of resources that are passed
// to another object which could close them.
public Connection returnedConnection_1(String url) {
Connection connection = DriverManager.getConnection(url);
return connection;
}
public Connection returnedConnection_2(String url) {
return DriverManager.getConnection(url);
}
public void delegatedConnection_1(String url) {
Connection connection = DriverManager.getConnection(url);
processConnection(connection);
}
public void delegatedConnection_2(String url) {
processConnection(DriverManager.getConnection(url));
}
}