UpdatesSqlHandler.java 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package hello;
  2. import static hello.Helper.getQueries;
  3. import static hello.Helper.randomWorld;
  4. import static hello.Helper.sendJson;
  5. import io.undertow.server.HttpHandler;
  6. import io.undertow.server.HttpServerExchange;
  7. import java.sql.Connection;
  8. import java.sql.PreparedStatement;
  9. import java.sql.ResultSet;
  10. import java.util.Objects;
  11. import javax.sql.DataSource;
  12. /**
  13. * Handles the updates test using a SQL database.
  14. */
  15. final class UpdatesSqlHandler implements HttpHandler {
  16. private final DataSource db;
  17. UpdatesSqlHandler(DataSource db) {
  18. this.db = Objects.requireNonNull(db);
  19. }
  20. @Override
  21. public void handleRequest(HttpServerExchange exchange) throws Exception {
  22. int queries = getQueries(exchange);
  23. World[] worlds = new World[queries];
  24. try (Connection connection = db.getConnection()) {
  25. try (PreparedStatement statement =
  26. connection.prepareStatement(
  27. "SELECT * FROM World WHERE id = ?")) {
  28. for (int i = 0; i < worlds.length; i++) {
  29. statement.setInt(1, randomWorld());
  30. try (ResultSet resultSet = statement.executeQuery()) {
  31. resultSet.next();
  32. int id = resultSet.getInt("id");
  33. int randomNumber = resultSet.getInt("randomNumber");
  34. worlds[i] = new World(id, randomNumber);
  35. }
  36. }
  37. }
  38. try (PreparedStatement statement =
  39. connection.prepareStatement(
  40. "UPDATE World SET randomNumber = ? WHERE id = ?")) {
  41. for (World world : worlds) {
  42. world.randomNumber = randomWorld();
  43. statement.setInt(1, world.randomNumber);
  44. statement.setInt(2, world.id);
  45. statement.executeUpdate();
  46. }
  47. }
  48. }
  49. sendJson(exchange, worlds);
  50. }
  51. }