#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-популярный выбор) или не возвращать встроенное: создать исключение или, что эквивалентно, не перехватывать исключение, которое уже было создано кем-то дальше по стеку. Я бы пошел за исключением.