patternjavaMinor
Accessing the only element of Java ResultSet
Viewed 0 times
thejavaelementresultsetonlyaccessing
Problem
Does this code look OK?
public Map getById(long id) {
String sql = "select * from " + this._TABLE_NAME + " where id = ?";
PreparedStatement p;
Map result = new HashMap();
try {
p = conn.prepareStatement(sql);
p.setLong(1, id);
ResultSet rs = p.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int fieldsCount = rsmd.getColumnCount();
// is this ok?
rs.next();
for (int i=1;i<fieldsCount+1;i++) {
String cName = rsmd.getColumnName(i);
result.put(cName, rs.getString(cName));
}
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}Solution
Here is a bit reworked version of you code. Some explanation:
Code:
- Assume
_TABLE_NAMEis a constant, so there is no need to build query in every method call.
- Force getting connection and close resources to avoid side effects.
- Propagate
SQLExceptionto caller (caller should decide what to do with thrown exception).
Code:
private final static String GET_DATA_BY_ID = "select * from " + _TABLE_NAME + " where id = ?";
public Map getById(long id) throws SQLException {
Connection conn = null;
Map result = new HashMap();
try {
conn = getConnection();
PreparedStatement preparedStatement = null;
ResultSet rs = null;
try {
preparedStatement = conn.prepareStatement(GET_DATA_BY_ID);
preparedStatement.setLong(1, id);
try {
rs = preparedStatement.executeQuery();
if (rs.next()) {
ResultSetMetaData rsmd = rs.getMetaData();
int fieldsCount = rsmd.getColumnCount();
for (int i = 1; i < fieldsCount + 1; i++) {
String cName = rsmd.getColumnName(i);
result.put(cName, rs.getString(cName));
}
}
} finally {
if (rs != null)
rs.close();
}
} finally {
if (preparedStatement != null)
preparedStatement.close();
}
} finally {
if (conn != null)
conn.close();
}
return result;
}Code Snippets
private final static String GET_DATA_BY_ID = "select * from " + _TABLE_NAME + " where id = ?";
public Map<String, String> getById(long id) throws SQLException {
Connection conn = null;
Map<String, String> result = new HashMap<String, String>();
try {
conn = getConnection();
PreparedStatement preparedStatement = null;
ResultSet rs = null;
try {
preparedStatement = conn.prepareStatement(GET_DATA_BY_ID);
preparedStatement.setLong(1, id);
try {
rs = preparedStatement.executeQuery();
if (rs.next()) {
ResultSetMetaData rsmd = rs.getMetaData();
int fieldsCount = rsmd.getColumnCount();
for (int i = 1; i < fieldsCount + 1; i++) {
String cName = rsmd.getColumnName(i);
result.put(cName, rs.getString(cName));
}
}
} finally {
if (rs != null)
rs.close();
}
} finally {
if (preparedStatement != null)
preparedStatement.close();
}
} finally {
if (conn != null)
conn.close();
}
return result;
}Context
StackExchange Code Review Q#1839, answer score: 7
Revisions (0)
No revisions yet.