java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java
branchv_0
changeset 37 9e6f8e5d5f98
parent 35 b2ff3b2d58b2
child 41 514df5061f59
     1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java	Mon Dec 23 00:14:29 2013 +0100
     1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java	Mon Dec 23 11:50:24 2013 +0100
     1.3 @@ -57,68 +57,58 @@
     1.4  	}
     1.5  
     1.6  	private void processCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
     1.7 -		SQLCommand.COMMAND_TYPE commandType = sqlCommand.getCommandType();
     1.8 -		switch (commandType) {
     1.9 -			case QUERY:
    1.10 -				processQueryCommand(sqlCommand, formatter);
    1.11 -				break;
    1.12 -			case UPDATE:
    1.13 -				processUpdateCommand(sqlCommand, formatter);
    1.14 -				break;
    1.15 -			default:
    1.16 -				throw new IllegalArgumentException("Unexpected command type: " + commandType);
    1.17 -		}
    1.18 -	}
    1.19 -
    1.20 -	private void processQueryCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
    1.21 -		formatter.writeStartResultSet();
    1.22 -		formatter.writeQuery(sqlCommand.getQuery());
    1.23 -		formatter.writeParameters(sqlCommand.getParameters());
    1.24  		try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) {
    1.25  			sqlCommand.parametrize(ps);
    1.26  
    1.27  			boolean isRS = ps.execute();
    1.28  			if (isRS) {
    1.29  				try (ResultSet rs = ps.getResultSet()) {
    1.30 -					processResultSet(rs, formatter);
    1.31 +					processResultSet(sqlCommand, rs, formatter);
    1.32  				}
    1.33  			} else {
    1.34 -				/**
    1.35 -				 * TODO: process UPDATE command
    1.36 -				 */
    1.37 +				processUpdateResult(sqlCommand, ps, formatter);
    1.38  			}
    1.39  
    1.40  			while (ps.getMoreResults() || ps.getUpdateCount() > -1) {
    1.41 -				/**
    1.42 -				 * TODO: process more RS or UPDATEs
    1.43 -				 */
    1.44 +				ResultSet rs = ps.getResultSet();
    1.45 +				if (rs == null) {
    1.46 +					processUpdateResult(sqlCommand, ps, formatter);
    1.47 +				} else {
    1.48 +					processResultSet(sqlCommand, rs, formatter);
    1.49 +					rs.close();
    1.50 +				}
    1.51  			}
    1.52  		}
    1.53 +	}
    1.54 +
    1.55 +	private void processUpdateResult(SQLCommand sqlCommand, PreparedStatement ps, Formatter formatter) throws SQLException {
    1.56 +		formatter.writeStartUpdatesResult();
    1.57 +		formatter.writeQuery(sqlCommand.getQuery());
    1.58 +		formatter.writeParameters(sqlCommand.getParameters());
    1.59 +
    1.60 +		int updatedRowsCount = ps.getUpdateCount();
    1.61 +		formatter.writeUpdatedRowsCount(updatedRowsCount);
    1.62 +
    1.63 +		formatter.writeStartGeneratedKeys();
    1.64 +		try (ResultSet rs = ps.getGeneratedKeys()) {
    1.65 +			processResultSetRows(rs, formatter);
    1.66 +		}
    1.67 +		formatter.writeEndGeneratedKeys();
    1.68 +
    1.69 +		formatter.writeEndUpdatesResult();
    1.70 +	}
    1.71 +
    1.72 +	private void processResultSet(SQLCommand sqlCommand, ResultSet rs, Formatter formatter) throws SQLException {
    1.73 +		formatter.writeStartResultSet();
    1.74 +		formatter.writeQuery(sqlCommand.getQuery());
    1.75 +		formatter.writeParameters(sqlCommand.getParameters());
    1.76 +
    1.77 +		processResultSetRows(rs, formatter);
    1.78  
    1.79  		formatter.writeEndResultSet();
    1.80  	}
    1.81  
    1.82 -	private void processUpdateCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
    1.83 -		formatter.writeStartUpdatesResult();
    1.84 -		formatter.writeQuery(sqlCommand.getQuery());
    1.85 -		formatter.writeParameters(sqlCommand.getParameters());
    1.86 -		try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) {
    1.87 -			sqlCommand.parametrize(ps);
    1.88 -			int updatedRowsCount = ps.executeUpdate();
    1.89 -			formatter.writeUpdatedRowsCount(updatedRowsCount);
    1.90 -
    1.91 -			formatter.writeStartGeneratedKeys();
    1.92 -			try (ResultSet rs = ps.getGeneratedKeys()) {
    1.93 -				processResultSet(rs, formatter);
    1.94 -			}
    1.95 -			formatter.writeEndGeneratedKeys();
    1.96 -
    1.97 -		}
    1.98 -
    1.99 -		formatter.writeEndUpdatesResult();
   1.100 -	}
   1.101 -
   1.102 -	private void processResultSet(ResultSet rs, Formatter formatter) throws SQLException {
   1.103 +	private void processResultSetRows(ResultSet rs, Formatter formatter) throws SQLException {
   1.104  		formatter.writeColumnsHeader(new ColumnsHeader(rs.getMetaData()));
   1.105  		int columnCount = rs.getMetaData().getColumnCount();
   1.106