Как я могу гарантировать, что моя функция всегда возвращает сгенерированный объект подключения?

#java #database #odbc

Вопрос:

Мне нужно выполнить задание для моего университета, в котором я должен написать функцию, возвращающую соединение с базой данных. Я создаю новый объект подключения в блоке try и теперь хочу вернуть его, но мне нужно убедиться, что моя функция всегда возвращает соединение, даже если я попадаю в блок catch. Как написать функцию, которая всегда возвращает соединение? Я попытался использовать finally, но переменная cn существует только в блоке try.

 import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties;    public class ConnectDB {    final String propfile = "/properties/db.properties";    public static void main(String[] args) {  ConnectDB con = new ConnectDB();  con.connect();    }  public Connection connect() {    try {  final java.io.InputStream propFile = new ConnectDB().getClass().getResourceAsStream(propfile);  final Properties props = new Properties(System.getProperties());  props.load(propFile);   Connection cn = DriverManager.getConnection(props.getProperty("url"), props.getProperty("user"), props.getProperty("password"));  return cn;  }    catch (Exception e) {  System.out.println("connect ERROR :n"   e.toString());  }    }  }  

Комментарии:

1. Вы не можете: было создано исключение, потому что невозможно было создать соединение. Вы можете вернуть значение null, но это просто приведет к более сложной для диагностики ошибке, когда вызывающий абонент попытается ее использовать. Вместо этого полностью избавьтесь от попытки/улова и позвольте connect создать исключение. Это позволит сообщить о причине проблемы при первой же возможности.

2. Поскольку вы не можете гарантировать, что сбоя не произойдет, у вас действительно есть только два варианта: вернуть значение с надписью «сбой» вместо ожидаемого объекта подключения (null-популярный выбор) или не возвращать встроенное: создать исключение или, что эквивалентно, не перехватывать исключение, которое уже было создано кем-то дальше по стеку. Я бы пошел за исключением.