Согласно pydoc, hasattr (obj, опора) просто называет getattr (obj, опора) и ловит исключения. Так, это столь же допустимо, чтобы обернуть доступ атрибута с оператором попытки и поймать AttributeError, как это должно использовать hasattr () заранее.
a = SomeClass()
try:
return a.fake_prop
except AttributeError:
return default_value
В основном в JDBC большинство этих свойств не настраиваются в API таким образом, скорее они зависят от реализации. JDBC обрабатывает это, позволяя URL подключения быть разным для разных поставщиков.
Итак, что вы делаете, это регистрируете драйвер, чтобы система JDBC могла знать, что делать с URL:
DriverManager.registerDriver((Driver) Class.forName("com.mysql.jdbc.Driver").newInstance());
Затем вы формируете URL :
String url = "jdbc:mysql://[host][,failoverhost...][:port]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]"
И, наконец, используйте его для установления соединения:
Connection c = DriverManager.getConnection(url);
В более сложном JDBC вы связаны с пулами соединений и т.п., а серверы приложений часто имеют свой собственный способ регистрации драйверов в JNDI, и вы ищете DataSource оттуда и вызовите на нем getConnection.
Что касается свойств, поддерживаемых MySQL, см. здесь .
EDIT: Еще одна мысль,
Возможно, вам стоит обратить внимание на проект Commons DBCP . Он предоставляет BasicDataSource , который настроен примерно так же, как в вашем примере. Чтобы использовать это, вам понадобится JDBC JAR поставщика базы данных в пути к классам, и вы должны указать имя класса драйвера поставщика и URL базы данных в правильном формате.
Изменить:
Если вы хотите настроить BasicDataSource
для MySQL вы должны сделать что-то вроде этого:
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("username");
dataSource.setPassword("password");
dataSource.setUrl("jdbc:mysql://<host>:<port>/<database>");
dataSource.setMaxActive(10);
dataSource.setMaxIdle(5);
dataSource.setInitialSize(5);
dataSource.setValidationQuery("SELECT 1");
Код, которому требуется DataSource
, затем может его использовать.
Я думаю, что пример неверен - javax.sql.DataSource
также не имеет этих свойств. Ваш DataSource
должен иметь тип org.apache.derby.jdbc.ClientDataSource
, который должен иметь эти свойства.
Документ javadoc для DataSource, на который вы ссылаетесь, имеет неправильный пакет. Вам следует посмотреть javax.sql.DataSource . Как видите, это интерфейс. Конфигурация имени хоста и порта зависит от реализации, то есть от используемого вами драйвера JDBC.
Я не проверял документы Derby javadocs, но полагаю, что код должен компилироваться следующим образом:
ClientDataSource ds = org.apache.derby.jdbc.ClientDataSource()
ds.setHost etc....