java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java
branchv_0
changeset 37 9e6f8e5d5f98
parent 35 b2ff3b2d58b2
child 41 514df5061f59
equal deleted inserted replaced
36:025fbe816bbf 37:9e6f8e5d5f98
    55 		}
    55 		}
    56 		formatter.writeEndDatabase();
    56 		formatter.writeEndDatabase();
    57 	}
    57 	}
    58 
    58 
    59 	private void processCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
    59 	private void processCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
    60 		SQLCommand.COMMAND_TYPE commandType = sqlCommand.getCommandType();
       
    61 		switch (commandType) {
       
    62 			case QUERY:
       
    63 				processQueryCommand(sqlCommand, formatter);
       
    64 				break;
       
    65 			case UPDATE:
       
    66 				processUpdateCommand(sqlCommand, formatter);
       
    67 				break;
       
    68 			default:
       
    69 				throw new IllegalArgumentException("Unexpected command type: " + commandType);
       
    70 		}
       
    71 	}
       
    72 
       
    73 	private void processQueryCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
       
    74 		formatter.writeStartResultSet();
       
    75 		formatter.writeQuery(sqlCommand.getQuery());
       
    76 		formatter.writeParameters(sqlCommand.getParameters());
       
    77 		try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) {
    60 		try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) {
    78 			sqlCommand.parametrize(ps);
    61 			sqlCommand.parametrize(ps);
    79 
    62 
    80 			boolean isRS = ps.execute();
    63 			boolean isRS = ps.execute();
    81 			if (isRS) {
    64 			if (isRS) {
    82 				try (ResultSet rs = ps.getResultSet()) {
    65 				try (ResultSet rs = ps.getResultSet()) {
    83 					processResultSet(rs, formatter);
    66 					processResultSet(sqlCommand, rs, formatter);
    84 				}
    67 				}
    85 			} else {
    68 			} else {
    86 				/**
    69 				processUpdateResult(sqlCommand, ps, formatter);
    87 				 * TODO: process UPDATE command
       
    88 				 */
       
    89 			}
    70 			}
    90 
    71 
    91 			while (ps.getMoreResults() || ps.getUpdateCount() > -1) {
    72 			while (ps.getMoreResults() || ps.getUpdateCount() > -1) {
    92 				/**
    73 				ResultSet rs = ps.getResultSet();
    93 				 * TODO: process more RS or UPDATEs
    74 				if (rs == null) {
    94 				 */
    75 					processUpdateResult(sqlCommand, ps, formatter);
       
    76 				} else {
       
    77 					processResultSet(sqlCommand, rs, formatter);
       
    78 					rs.close();
       
    79 				}
    95 			}
    80 			}
    96 		}
    81 		}
       
    82 	}
       
    83 
       
    84 	private void processUpdateResult(SQLCommand sqlCommand, PreparedStatement ps, Formatter formatter) throws SQLException {
       
    85 		formatter.writeStartUpdatesResult();
       
    86 		formatter.writeQuery(sqlCommand.getQuery());
       
    87 		formatter.writeParameters(sqlCommand.getParameters());
       
    88 
       
    89 		int updatedRowsCount = ps.getUpdateCount();
       
    90 		formatter.writeUpdatedRowsCount(updatedRowsCount);
       
    91 
       
    92 		formatter.writeStartGeneratedKeys();
       
    93 		try (ResultSet rs = ps.getGeneratedKeys()) {
       
    94 			processResultSetRows(rs, formatter);
       
    95 		}
       
    96 		formatter.writeEndGeneratedKeys();
       
    97 
       
    98 		formatter.writeEndUpdatesResult();
       
    99 	}
       
   100 
       
   101 	private void processResultSet(SQLCommand sqlCommand, ResultSet rs, Formatter formatter) throws SQLException {
       
   102 		formatter.writeStartResultSet();
       
   103 		formatter.writeQuery(sqlCommand.getQuery());
       
   104 		formatter.writeParameters(sqlCommand.getParameters());
       
   105 
       
   106 		processResultSetRows(rs, formatter);
    97 
   107 
    98 		formatter.writeEndResultSet();
   108 		formatter.writeEndResultSet();
    99 	}
   109 	}
   100 
   110 
   101 	private void processUpdateCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
   111 	private void processResultSetRows(ResultSet rs, Formatter formatter) throws SQLException {
   102 		formatter.writeStartUpdatesResult();
       
   103 		formatter.writeQuery(sqlCommand.getQuery());
       
   104 		formatter.writeParameters(sqlCommand.getParameters());
       
   105 		try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) {
       
   106 			sqlCommand.parametrize(ps);
       
   107 			int updatedRowsCount = ps.executeUpdate();
       
   108 			formatter.writeUpdatedRowsCount(updatedRowsCount);
       
   109 
       
   110 			formatter.writeStartGeneratedKeys();
       
   111 			try (ResultSet rs = ps.getGeneratedKeys()) {
       
   112 				processResultSet(rs, formatter);
       
   113 			}
       
   114 			formatter.writeEndGeneratedKeys();
       
   115 
       
   116 		}
       
   117 
       
   118 		formatter.writeEndUpdatesResult();
       
   119 	}
       
   120 
       
   121 	private void processResultSet(ResultSet rs, Formatter formatter) throws SQLException {
       
   122 		formatter.writeColumnsHeader(new ColumnsHeader(rs.getMetaData()));
   112 		formatter.writeColumnsHeader(new ColumnsHeader(rs.getMetaData()));
   123 		int columnCount = rs.getMetaData().getColumnCount();
   113 		int columnCount = rs.getMetaData().getColumnCount();
   124 
   114 
   125 		while (rs.next()) {
   115 		while (rs.next()) {
   126 			formatter.writeStartRow();
   116 			formatter.writeStartRow();