diff -r 025fbe816bbf -r 9e6f8e5d5f98 java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java --- 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();