import java.sql.*;

public class Main {
    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/student_db";
        String username = "root";
        String password = "root";

        try {
            // Load JDBC Driver
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("Loading JDBC Driver...");
            System.out.println("Driver loaded successfully!");

            // Establish Connection
            System.out.println("\nConnecting to the database...");
            Connection con = DriverManager.getConnection(
                url, username, password
            );

            System.out.println("Connecting to:");
            System.out.println(url);
            System.out.println("Connection established successfully!");

            // Execute Query
            System.out.println("\nPerforming database operations...");

            String query = "SELECT * FROM Students";
            Statement stmt = con.createStatement();

            System.out.println("Executing Query: " + query + ";");

            ResultSet rs = stmt.executeQuery(query);

            System.out.println("+----+----------------+-------+");
            System.out.printf("| %-2s | %-14s | %-5s |%n",
                "ID", "Name", "Marks");
            System.out.println("+----+----------------+-------+");

            while (rs.next()) {
                System.out.printf("| %-2d | %-14s | %-5.1f |%n",
                    rs.getInt("ID"),
                    rs.getString("Name"),
                    rs.getDouble("Marks"));
            }

            System.out.println("+----+----------------+-------+");

            System.out.println(
                "Database query executed successfully."
            );

            // Close Resources
            System.out.println("\nClosing database resources...");

            rs.close();
            stmt.close();
            con.close();

            System.out.println("Connection closed successfully!");
        }
        catch (ClassNotFoundException e) {
            System.out.println("Driver not found: " + e.getMessage());
        }
        catch (SQLException e) {
            System.out.println("Connection Error: " + e.getMessage());
        }
    }
}