Joreto

Untitled

Feb 15th, 2024
1,319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.23 KB | None | 0 0
  1. import java.sql.Connection;
  2. import java.sql.PreparedStatement;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.util.List;
  6. import java.util.Scanner;
  7.  
  8. public class AddMinions {
  9.     private static final String PRINT_VILLAIN_ADD_FORMAT = "Villain %s was added to the database.\n";
  10.     private static final String GET_VILLAIN_BY_NAME = "select id from villains where name = ? ";
  11.     private static final String INSERT_INTO_VILLAIN = "insert into villains(name, evilness_factor) value (?, ?) ";
  12.     private static final String EVILNESS_FACTOR = "evil";
  13.  
  14.     private static final String PRINT_TOWN_ADD_FORMAT = "Town %s was added to the database.\n";
  15.     private static final String GET_TOWN_BY_NAME = "select id from towns where name = ? ";
  16.     private static final String INSERT_INTO_TOWNS = "insert into towns(name) value(?)";
  17.  
  18.     private static final String GET_LAST_MINION_BY_NAME =
  19.             "select id from minions_db.minions where name = ? order by id desc limit 1";
  20.     private static final String INSERT_MINION = "insert into minions_db.minions(name, age, town_id) values(?,?,?) ";
  21.     private static final String INSERT_MINION_VILLAIN = "insert into minions_villains (minion_id, villain_id) VALUES (?, ?);";
  22.  
  23.     private static final String PRINT_MINION_TO_VILLAIN_ADD_FORMAT = "Successfully added %s to be minion of %s.\n";
  24.  
  25.     public static void main(String[] args) throws SQLException {
  26.         final Connection sqlConnection = Utils.getSqlConnection();
  27.  
  28.         final Scanner scanner = new Scanner(System.in);
  29.  
  30.         final String[] minionsInfo = scanner.nextLine().split(" ");
  31.         final String minionName = minionsInfo[1];
  32.         final int minionAge = Integer.parseInt(minionsInfo[2]);
  33.         final String minionTownName = minionsInfo[3];
  34.  
  35.         final String villainName = scanner.nextLine().split(" ")[1];
  36.  
  37.         int townId = getEntryId(sqlConnection,
  38.                 List.of(minionTownName),
  39.                 GET_TOWN_BY_NAME,
  40.                 INSERT_INTO_TOWNS,
  41.                 PRINT_TOWN_ADD_FORMAT);
  42.  
  43.         int villainId = getEntryId(sqlConnection,
  44.                 List.of(villainName, EVILNESS_FACTOR),
  45.                 GET_VILLAIN_BY_NAME,
  46.                 INSERT_INTO_VILLAIN,
  47.                 PRINT_VILLAIN_ADD_FORMAT);
  48.  
  49.         final PreparedStatement insertMinionStatement = sqlConnection.prepareStatement(INSERT_MINION);
  50.         insertMinionStatement.setString(1, minionName);
  51.         insertMinionStatement.setInt(2, minionAge);
  52.         insertMinionStatement.setInt(3, townId);
  53.  
  54.         insertMinionStatement.executeUpdate();
  55.  
  56.         final PreparedStatement lastMinion = sqlConnection.prepareStatement(GET_LAST_MINION_BY_NAME);
  57.         lastMinion.setString(1, minionName);
  58.  
  59.         final ResultSet resultSet = lastMinion.executeQuery();
  60.         resultSet.next();
  61.  
  62.         final int minionId = resultSet.getInt("id");
  63.  
  64.         final PreparedStatement insertStatement = sqlConnection.prepareStatement(INSERT_MINION_VILLAIN);
  65.         insertStatement.setInt(1, minionId);
  66.         insertStatement.setInt(2, villainId);
  67.  
  68.         insertStatement.executeUpdate();
  69.  
  70.         System.out.printf(PRINT_MINION_TO_VILLAIN_ADD_FORMAT, minionName, villainName);
  71.  
  72.         sqlConnection.close();
  73.     }
  74.  
  75.     private static int getEntryId(Connection sqlConnection, List<String> arguments, String getQuery, String insertQuery, String printVillainAddFormat) throws SQLException {
  76.         final PreparedStatement statement = sqlConnection.prepareStatement(getQuery);
  77.         final String name = arguments.get(0);
  78.         statement.setString(1, name);
  79.  
  80.         final ResultSet resultSet = statement.executeQuery();
  81.  
  82.         if (!resultSet.next()) {
  83.             final PreparedStatement insertStatement = sqlConnection.prepareStatement(insertQuery);
  84.  
  85.             for (int i = 1; i <= arguments.size(); i++) {
  86.                 insertStatement.setString(i, arguments.get(i - 1));
  87.             }
  88.  
  89.             insertStatement.executeUpdate();
  90.  
  91.             final ResultSet afterUpdate = statement.executeQuery();
  92.             afterUpdate.next();
  93.  
  94.             System.out.printf(printVillainAddFormat, name);
  95.  
  96.             return afterUpdate.getInt("id");
  97.         }
  98.  
  99.         return resultSet.getInt("id");
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment