1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package hello;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.google.common.net.MediaType;
- import io.undertow.server.HttpHandler;
- import io.undertow.server.HttpServerExchange;
- import io.undertow.util.Headers;
- import javax.sql.DataSource;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.util.Objects;
- import static hello.HelloWebServer.JSON_UTF8;
- /**
- * Handles the single- and multiple-query database tests using a SQL database.
- */
- final class DbSqlHandler implements HttpHandler {
- private final ObjectMapper objectMapper;
- private final DataSource database;
- DbSqlHandler(ObjectMapper objectMapper, DataSource database) {
- this.objectMapper = Objects.requireNonNull(objectMapper);
- this.database = Objects.requireNonNull(database);
- }
- @Override
- public void handleRequest(HttpServerExchange exchange) throws Exception {
- if (exchange.isInIoThread()) {
- exchange.dispatch(this);
- return;
- }
- int queries = Helper.getQueries(exchange);
- World[] worlds = new World[queries];
- try (Connection connection = database.getConnection();
- PreparedStatement statement = connection.prepareStatement(
- "SELECT * FROM World WHERE id = ?",
- ResultSet.TYPE_FORWARD_ONLY,
- ResultSet.CONCUR_READ_ONLY)) {
- for (int i = 0; i < queries; i++) {
- statement.setInt(1, Helper.randomWorld());
- try (ResultSet resultSet = statement.executeQuery()) {
- resultSet.next();
- worlds[i] = new World(
- resultSet.getInt("id"),
- resultSet.getInt("randomNumber"));
- }
- }
- }
- exchange.getResponseHeaders().put(
- Headers.CONTENT_TYPE, JSON_UTF8);
- exchange.getResponseSender().send(objectMapper.writeValueAsString(worlds));
- }
- }
|