--- a/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java Mon Dec 23 00:14:29 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java Mon Dec 23 11:50:24 2013 +0100
@@ -57,68 +57,58 @@
}
private void processCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
- SQLCommand.COMMAND_TYPE commandType = sqlCommand.getCommandType();
- switch (commandType) {
- case QUERY:
- processQueryCommand(sqlCommand, formatter);
- break;
- case UPDATE:
- processUpdateCommand(sqlCommand, formatter);
- break;
- default:
- throw new IllegalArgumentException("Unexpected command type: " + commandType);
- }
- }
-
- private void processQueryCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
- formatter.writeStartResultSet();
- formatter.writeQuery(sqlCommand.getQuery());
- formatter.writeParameters(sqlCommand.getParameters());
try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) {
sqlCommand.parametrize(ps);
boolean isRS = ps.execute();
if (isRS) {
try (ResultSet rs = ps.getResultSet()) {
- processResultSet(rs, formatter);
+ processResultSet(sqlCommand, rs, formatter);
}
} else {
- /**
- * TODO: process UPDATE command
- */
+ processUpdateResult(sqlCommand, ps, formatter);
}
while (ps.getMoreResults() || ps.getUpdateCount() > -1) {
- /**
- * TODO: process more RS or UPDATEs
- */
+ ResultSet rs = ps.getResultSet();
+ if (rs == null) {
+ processUpdateResult(sqlCommand, ps, formatter);
+ } else {
+ processResultSet(sqlCommand, rs, formatter);
+ rs.close();
+ }
}
}
+ }
+
+ private void processUpdateResult(SQLCommand sqlCommand, PreparedStatement ps, Formatter formatter) throws SQLException {
+ formatter.writeStartUpdatesResult();
+ formatter.writeQuery(sqlCommand.getQuery());
+ formatter.writeParameters(sqlCommand.getParameters());
+
+ int updatedRowsCount = ps.getUpdateCount();
+ formatter.writeUpdatedRowsCount(updatedRowsCount);
+
+ formatter.writeStartGeneratedKeys();
+ try (ResultSet rs = ps.getGeneratedKeys()) {
+ processResultSetRows(rs, formatter);
+ }
+ formatter.writeEndGeneratedKeys();
+
+ formatter.writeEndUpdatesResult();
+ }
+
+ private void processResultSet(SQLCommand sqlCommand, ResultSet rs, Formatter formatter) throws SQLException {
+ formatter.writeStartResultSet();
+ formatter.writeQuery(sqlCommand.getQuery());
+ formatter.writeParameters(sqlCommand.getParameters());
+
+ processResultSetRows(rs, formatter);
formatter.writeEndResultSet();
}
- private void processUpdateCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
- formatter.writeStartUpdatesResult();
- formatter.writeQuery(sqlCommand.getQuery());
- formatter.writeParameters(sqlCommand.getParameters());
- try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) {
- sqlCommand.parametrize(ps);
- int updatedRowsCount = ps.executeUpdate();
- formatter.writeUpdatedRowsCount(updatedRowsCount);
-
- formatter.writeStartGeneratedKeys();
- try (ResultSet rs = ps.getGeneratedKeys()) {
- processResultSet(rs, formatter);
- }
- formatter.writeEndGeneratedKeys();
-
- }
-
- formatter.writeEndUpdatesResult();
- }
-
- private void processResultSet(ResultSet rs, Formatter formatter) throws SQLException {
+ private void processResultSetRows(ResultSet rs, Formatter formatter) throws SQLException {
formatter.writeColumnsHeader(new ColumnsHeader(rs.getMetaData()));
int columnCount = rs.getMetaData().getColumnCount();