Динамично вызовите свойства именем строки с помощью VB.NET

У меня была эта точная проблема при разработке приложения Spring Boot в STS, но в конечном итоге развертывание упакованной войны в WebSphere (v.9). Основываясь на предыдущих ответах, моя ситуация была уникальной. ojdbc8.jar был в моей папке WEB-INF / lib с установленным набором родительского последнего класса, но всегда говорит, что не удалось найти подходящий драйвер.

Моя последняя проблема заключалась в том, что я использовал неправильный класс DataSource потому что я просто следил за онлайн-учебниками / примерами. Нашел подсказку благодаря тому, что Дэвид Дай прокомментировал свой собственный вопрос: Spring JDBC Не удалось загрузить класс драйвера JDBC [oracle.jdbc.driver.OracleDriver]

Также позже был найден весенний гуру пример с конкретным драйвером Oracle: https://springframework.guru/configuring-spring-boot-for-oracle/

Пример, который вызывает ошибку, используя org.springframework.jdbc.datasource.DriverManagerDataSource на основе общих примеров .

@Config
@EnableTransactionManagement
public class appDataConfig {
 \* Other Bean Defs *\
    @Bean
    public DataSource dataSource() {
        // configure and return the necessary JDBC DataSource
        DriverManagerDataSource dataSource = new DriverManagerDataSource("jdbc:oracle:thin:@//HOST:PORT/SID", "user", "password");
        dataSource.setSchema("MY_SCHEMA");
        return dataSource;
    }
}

И исправленный exapmle с использованием oracle.jdbc.pool.OracleDataSource:

@Config
@EnableTransactionManagement
public class appDataConfig {
/* Other Bean Defs */
@Bean
    public DataSource dataSource() {
        // configure and return the necessary JDBC DataSource
        OracleDataSource datasource = null;
        try {
            datasource = new OracleDataSource();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        datasource.setURL("jdbc:oracle:thin:@//HOST:PORT/SID");
        datasource.setUser("user");
        datasource.setPassword("password");

        return datasource;
    }
}

26
задан Tom 9 November 2009 в 20:50
поделиться

2 ответа

Другие ответили отлично обоснованно, но на всякий случай это - чувствительная к производительности часть кода, Вы могли бы хотеть скомпилировать отражающие вызовы в делегатов.

я имею запись в блоге о превращении MethodBase. Вызовите в делегатов. Код находится в C#, но та же техника может быть применена к VB.NET также. Для использования этого со свойствами получите соответствующий метод "метода set" с PropertyInfo. GetSetMethod и затем создает делегата, который вызывает это. У Вас могла быть карта от имени поля для "делегирования для вызова для установки поля".

Только для повторения это только действительно необходимо, если это находится в критической по отношению к производительности части кода. Иначе Вы могли бы все еще хотеть создать Dictionary<string, PropertyInfo>, чтобы не звонить GetProperty много раз, но о шаге для преобразования его в делегата, вероятно, не стоит вызывать беспокойство.

16
ответ дан Jon Skeet 28 November 2019 в 06:48
поделиться

Я не могу полагать, что другие плакаты сказали Вам использовать отражение. VB как функция CallByName, которая делает точно, что Вы хотите.

31
ответ дан Hannele 28 November 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: