Шаблон для соединения с различными базами данных с помощью JDBC

Поскольку вы включили поддержку покрытия кода, добавив эти CFLAGS -fprofile-arcs -ftest-покрытие - эти CFLAGS должны быть распространены для компиляции двоичного файла conftest, который создается autoconf , Этот двоичный файл создан для проверки того, поддерживается ли одна конкретная функция (как «использовать заголовок и трейлер .ctors / .dtors») или нет (на самом деле, в процессе конфигурирования происходит несколько аналогичных сборок для проверки конкретных функций). , Я не могу доказать это, потому что подробные распечатки ошибок должны быть в определенном файле журнала, которым вы не поделились:

| NOTE: The following config.log files may provide further information.
| NOTE: /scratch/work/day8/poky/build/tmp/work/i586-poky-linux/glibc/2.28-r0/build-i586-poky-linux/config.log

Но, держу пари, он должен содержать что-то вроде:

conftest.c:(.text+0xae): undefined reference to `__gcov_init'
...
collect2: ld returned 1 exit status
[117 ] Это связано с тем, что в коде используются некоторые вызовы функций, а компоновщик не может найти свои реализации (даже в этих конфликтных двоичных файлах, где они абсолютно бессмысленны).

можно пропустить этот конкретный тест конфигурации, указав соответствующий параметр конфигурации - libc_cv_ctors_header (в этом случае имя берется из glib's configure.ac) - добавление EXTRA_OECONF в local.conf (например, EXTRA_OECONF = "libc_cv_ctors_header = yes"), но эти флаги фактически влияют на все такие тесты, и нам не следует угадывать значения да / нет и так далее.

Таким образом, было бы лучше, чтобы компоновщик знал о поддержке покрытия - то есть, предоставил те же флаги для TARGET_LDFLAGS :

TARGET_LDFLAGS += "-fprofile-arcs -ftest-coverage"
7
задан Kevin Fairchild 18 November 2008 в 14:29
поделиться

4 ответа

Я предложил бы, чтобы Вы сделали это настраивающимся и включали эти три драйвера. Можно использовать шаблон как это: Создайте суперкласс (позволяет, называют это ДАО), который обеспечивает функциональность соединения с базой данных. Это могло быть абстрактно.

Создайте бетон sub класс для каждого типа базы данных, с которой Вы хотите соединиться. Таким образом, можно закончить с MySQLDAO, MSSQLDAO и OracleDAO., каждый будет загружать соответствующий драйвер и использовать его соответствующую строку подключения.

Создайте другой класс (позволяет, называют это DAOFactory) с методом getDAO (DB), который создаст экземпляр ДАО в зависимости от значения DB.

Так, например (в Псевдокоде):

 if(DB.equals("MySQL")){
    DAO = new MySQLDAO();
}
return DAO;

Таким образом, любой код, который должен соединиться с базой данных, назовет DAOFactory и попросит экземпляр ДАО. Можно сохранить значение DB во внешнем файле (как файл свойств) так, чтобы Вы не изменяли код для изменения типа базы данных.

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

7
ответ дан 6 December 2019 в 21:21
поделиться

Если Вы нуждаетесь в чем-либо сложном, В спящем режиме, хороший выбор.

иначе то, что я сделал бы, сохранить Ваши детали соединения в файле свойств (или некоторая другая форма конфигурации) - а именно: имя класса драйвера, URL JDBC, имя пользователя и пароль.

Затем все, что необходимо сделать, загрузить детали соединения из файла свойств и включать корректный файл JAR в путь к классу, и Вы сделаны.

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

2
ответ дан 6 December 2019 в 21:21
поделиться

Смотрите на Источник данных. Это - предпочтительный механизм для получения соединения с базой данных.

IMO это предоставляет adminstrator самую большую гибкость для выбора базы данных, организации пула подключений и стратегий транзакции.

При использовании кота то посмотрите здесь для того, как зарегистрировать Источник данных в JNDI кота.

Если Вы используете Spring, то можно получить использование Источника данных jee:jndi-lookup.

Если Вы используете Spring, но не хотите использовать JNDI, смотреть на DriverManagerDataSource для обсуждения того, как получить объединенный Источник данных (DBCP или C3P0).

1
ответ дан 6 December 2019 в 21:21
поделиться

Если Вы осторожны (и Вы тестируете), можно сделать это с прямым JDBC и просто варьироваться класс драйвера и информация о соединении. Вы определенно хотите избегать моста JDBC-ODBC, поскольку это обычно медленно и ненадежно. Мост, более вероятно, будет вести себя по-другому через dbs, чем JDBC.

Я думаю, что путь ДАО является излишеством, если Ваши требования так же просты, как перечислено.

При выполнении большого количества вставок Вы могли бы хотеть исследовать подготовленные операторы и обработанные в пакетном режиме обновления, поскольку они намного более эффективны. Это могло бы закончить тем, что было менее портативно - трудно для высказывания без тестирования.

2
ответ дан 6 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

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