java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java
branchv_0
changeset 37 9e6f8e5d5f98
parent 35 b2ff3b2d58b2
child 41 514df5061f59
--- 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();