java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java
branchv_0
changeset 142 da1e38386d84
parent 108 d06d90b28217
child 146 4f4f515df807
equal deleted inserted replaced
141:ecd17aad1178 142:da1e38386d84
    64 	}
    64 	}
    65 
    65 
    66 	public void executeQuery(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
    66 	public void executeQuery(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
    67 		formatter.writeStartBatch();
    67 		formatter.writeStartBatch();
    68 		formatter.writeStartDatabase(databaseDefinition);
    68 		formatter.writeStartDatabase(databaseDefinition);
       
    69 		formatter.writeStartStatement();
       
    70 		formatter.writeQuery(sqlCommand.getQuery());
       
    71 		formatter.writeParameters(sqlCommand.getParameters());
    69 		processCommand(sqlCommand, formatter);
    72 		processCommand(sqlCommand, formatter);
       
    73 		formatter.writeEndStatement();
    70 		formatter.writeEndDatabase();
    74 		formatter.writeEndDatabase();
    71 		formatter.writeEndBatch();
    75 		formatter.writeEndBatch();
    72 	}
    76 	}
    73 
    77 
    74 	public void executeBatch(Batch batch, Formatter formatter) throws SQLException {
    78 	public void executeBatch(Batch batch, Formatter formatter) throws SQLException {
    75 		formatter.writeStartBatch();
    79 		formatter.writeStartBatch();
    76 		formatter.writeStartDatabase(databaseDefinition);
    80 		formatter.writeStartDatabase(databaseDefinition);
    77 		while (batch.hasNext()) {
    81 		while (batch.hasNext()) {
    78 			processCommand(batch.next(), formatter);
    82 			SQLCommand sqlCommand = batch.next();
       
    83 			formatter.writeStartStatement();
       
    84 			formatter.writeQuery(sqlCommand.getQuery());
       
    85 			formatter.writeParameters(sqlCommand.getParameters());
       
    86 			processCommand(sqlCommand, formatter);
       
    87 			formatter.writeEndStatement();
    79 		}
    88 		}
    80 		formatter.writeEndDatabase();
    89 		formatter.writeEndDatabase();
    81 		formatter.writeEndBatch();
    90 		formatter.writeEndBatch();
    82 	}
    91 	}
    83 
    92 
    88 
    97 
    89 			boolean isRS = ps.execute();
    98 			boolean isRS = ps.execute();
    90 			log.log(Level.FINE, "Statement executed");
    99 			log.log(Level.FINE, "Statement executed");
    91 			if (isRS) {
   100 			if (isRS) {
    92 				try (ResultSet rs = ps.getResultSet()) {
   101 				try (ResultSet rs = ps.getResultSet()) {
    93 					processResultSet(sqlCommand, rs, formatter);
   102 					processResultSet(rs, formatter);
    94 				}
   103 				}
    95 			} else {
   104 			} else {
    96 				processUpdateResult(sqlCommand, ps, formatter);
   105 				processUpdateResult(ps, formatter);
    97 			}
   106 			}
    98 			logWarnings(ps);
   107 			logWarnings(ps);
    99 
   108 
   100 			while (ps.getMoreResults() || ps.getUpdateCount() > -1) {
   109 			while (ps.getMoreResults() || ps.getUpdateCount() > -1) {
   101 				ResultSet rs = ps.getResultSet();
   110 				ResultSet rs = ps.getResultSet();
   102 				if (rs == null) {
   111 				if (rs == null) {
   103 					processUpdateResult(sqlCommand, ps, formatter);
   112 					processUpdateResult(ps, formatter);
   104 				} else {
   113 				} else {
   105 					processResultSet(sqlCommand, rs, formatter);
   114 					processResultSet(rs, formatter);
   106 					rs.close();
   115 					rs.close();
   107 				}
   116 				}
   108 				logWarnings(ps);
   117 				logWarnings(ps);
   109 			}
   118 			}
   110 		}
   119 		}
   111 	}
   120 	}
   112 
   121 
   113 	private void processUpdateResult(SQLCommand sqlCommand, PreparedStatement ps, Formatter formatter) throws SQLException {
   122 	private void processUpdateResult(PreparedStatement ps, Formatter formatter) throws SQLException {
   114 		formatter.writeStartUpdatesResult();
   123 		formatter.writeUpdatesResult(ps.getUpdateCount());
   115 		formatter.writeQuery(sqlCommand.getQuery());
       
   116 		formatter.writeParameters(sqlCommand.getParameters());
       
   117 		formatter.writeUpdatedRowsCount(ps.getUpdateCount());
       
   118 		formatter.writeEndUpdatesResult();
       
   119 	}
   124 	}
   120 
   125 
   121 	private void processResultSet(SQLCommand sqlCommand, ResultSet rs, Formatter formatter) throws SQLException {
   126 	private void processResultSet(ResultSet rs, Formatter formatter) throws SQLException {
   122 		formatter.writeStartResultSet();
   127 		formatter.writeStartResultSet(new ColumnsHeader(rs.getMetaData()));
   123 		formatter.writeQuery(sqlCommand.getQuery());
       
   124 		formatter.writeParameters(sqlCommand.getParameters());
       
   125 
   128 
   126 		processResultSetRows(rs, formatter);
       
   127 
       
   128 		formatter.writeEndResultSet();
       
   129 	}
       
   130 
       
   131 	private void processResultSetRows(ResultSet rs, Formatter formatter) throws SQLException {
       
   132 		formatter.writeColumnsHeader(new ColumnsHeader(rs.getMetaData()));
       
   133 		int columnCount = rs.getMetaData().getColumnCount();
   129 		int columnCount = rs.getMetaData().getColumnCount();
   134 
   130 
   135 		while (rs.next()) {
   131 		while (rs.next()) {
   136 			formatter.writeStartRow();
   132 			formatter.writeStartRow();
   137 
   133 
   140 			}
   136 			}
   141 
   137 
   142 			formatter.writeEndRow();
   138 			formatter.writeEndRow();
   143 		}
   139 		}
   144 
   140 
       
   141 		formatter.writeEndResultSet();
   145 	}
   142 	}
   146 
   143 
   147 	private void logWarnings(PreparedStatement ps) throws SQLException {
   144 	private void logWarnings(PreparedStatement ps) throws SQLException {
   148 		SQLWarning w = ps.getWarnings();
   145 		SQLWarning w = ps.getWarnings();
   149 		while (w != null) {
   146 		while (w != null) {