How can I efficiently get all the values from a column via java through a SQL query without having to connect to the database with each subsequent call?
What I have now:
private List<String> retrieveSQLQuery(String sqlQuery) throws SQLException {
JDBC jdbc = new JDBC();
ResultSet rs = jdbc.getResultsSet(sqlQuery);
List<String> values = new ArrayList<>();
while (rs.next()) {
values.add(rs.getString("model"));
}
return values;
}
However, for each subsequent rs.next()
, it connects to the database, creates a statement and then retrieves the value.
It looks like this:
Connecting to database...
Creating statement...
Statement Created.
Connecting to database...
Creating statement...
Statement Created.
value1
Connecting to database...
Creating statement...
Statement Created.
Connecting to database...
Creating statement...
Statement Created.
value2
Connecting to database...
Creating statement...
Statement Created.
Connecting to database...
Creating statement...
Statement Created.
value3
Is there a more efficient way to do this?
Edit:
Here is my resultset method:
public ResultSet getResultsSet(String QueryString) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
CachedRowSetImpl crs = null;
try {
// STEP 1: Register JDBC driver
Class.forName(jdbcDriver);
// STEP 2: Open a connection
logger.info("Connecting to database...");
conn = DriverManager.getConnection(dbUrl, user, password);
// STEP 3: Execute a query.
logger.info("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = QueryString;
rs = stmt.executeQuery(sql);
crs = new CachedRowSetImpl();
crs.populate(rs);
logger.info("Statement Created.");
// STEP 5: Clean-up environment
} catch (ClassNotFoundException e) {
logger.error(e.getMessage());
} catch (SQLException e) {
logger.error(e.getMessage());
} finally {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
logger.error(e.getMessage());
}
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
logger.error(e.getMessage());
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
logger.error(e.getMessage());
}
} // end try
return crs;
}