MysqlTest.java:18: error: unreported exception SQLException; must be caught or declared to be thrown

Viewed 15

I'm working on an exercise mixing mysql and java. I create a function to convert numerical number in roman number. I would like to do the same by calling mysql table in a database according to the needs. Here is my table:

numerical | roman |
+-----------+-------+
|      1000 | M     |
|       900 | CM    |
|       500 | D     |
|       400 | CD    |
|       100 | C     |
|        90 | XC    |
|        50 | L     |
|        40 | XL    |
|        10 | X     |
|         9 | IX    |
|         5 | V     |
|         4 | IV    |
|         1 | I    

In my java code, I need to go through all the table row by row. Get the result and compare to a number. For example 2536: 1000 -> row 1, row 2 nothing, then 500 -> row 3 ...

Here is my code:

import java.sql.*;
import java.util.Properties;
import java.util.Scanner;

public class MysqlTest
{
  // The JDBC Connector Class.
    

    static String to_roman_number(int number, ResultSet rs, Statement stmt, ResultSetMetaData rsmd) {

        // String[] roman_table = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        // int[] numerical_table = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
        String result = " ";
        int my_number = number;
    
                    
        for(int i=1; i < rsmd.getPrecision(1); i++){
            rs.absolute(i);
            String roman = rs.getString("roman");
            int numerical = rs.getInt("numerical");

                    
            if(number / numerical !=0 && number != 0){
                        
                int rec = number / numerical;
                result += roman.repeat(rec);
                number -= rec * numerical;
            }
            else{
                continue;
            }
        }
                    
        return Integer.toString(my_number) + " ->" + result;
    }

  public static void main(String[] args) throws
                             ClassNotFoundException,SQLException
  {
    // Class.forName(xxx) loads the jdbc classes and
    // creates a drivermanager class factory
    String dbClassName = "com.mysql.cj.jdbc.Driver";
    Class.forName(dbClassName);

    // Properties for user and password. Here the user and password are both 'paulr'
    /* */ Properties p = new Properties();
    p.put("user","user");
    p.put("password","password");

    String CONNECTION ="jdbc:mysql://localhost/romanumerals";
    String sql = "SELECT * FROM numbers";
    

    

    // Now try to connect
    try (Connection c = DriverManager.getConnection(CONNECTION,p);
    Statement stmt  = c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE))
    {

    ResultSet rs = stmt.executeQuery(sql);
    ResultSetMetaData rsmd = rs.getMetaData();
    
    while(true){
            
            Scanner in = new Scanner(System.in);
            System.out.println("Please choose a number: ");
            int number = in.nextInt();

            if(number > 3000){
                System.out.println("Please choose a number smaller or equal to 3000");
            }
            else{
                System.out.println(to_roman_number(number, rs, stmt, rsmd));
            }
        
        }
        
        

    }catch (SQLException ex) {
        System.out.println(ex.getMessage());
    }

    System.out.println("It works !");
    // c.close();
    }
}

This code result in the following error:


MysqlTest.java:18: error: unreported exception SQLException; must be caught or declared to be thrown
        for(int i=1; i < rsmd.getPrecision(1); i++){
                                          ^
MysqlTest.java:19: error: unreported exception SQLException; must be caught or declared to be thrown
            rs.absolute(i);
                       ^
MysqlTest.java:20: error: unreported exception SQLException; must be caught or declared to be thrown
            String roman = rs.getString("roman");
                                       ^
MysqlTest.java:21: error: unreported exception SQLException; must be caught or declared to be thrown
            int numerical = rs.getInt("numerical");

I know I need to catch it in a SQLException but I can use ResultSet rs, Statement stmt, ResultSetMetaData rsmd inside my conversion function "to_roman_number()".

0 Answers
Related