Я пытаюсь получить доступ к данным в нескольких базах данных на одном запущенном экземпляре. структуры таблиц этих баз данных одинаковы; Насколько я знаю, создать новую связь с помощью jdbc очень дорого. Но строка подключения jdbc требует формата jdbc:mysql://hostname/ databaseName
, который должен указывать конкретную базу данных. Так что мне интересно, есть ли способ запросить данные в нескольких базах данных, используя одно соединение?Как подключить несколько баз данных на одном сервере с JDBC?
ответ
Документация MySQL плохо написано на эту тему.
Страница SELECT
Syntax ссылается на страницу JOIN
Syntax, на которой можно записать имя таблицы, даже если вы не используете предложения JOIN
. Страница JOIN
Syntax просто говорит tbl_name
, не уточняя, что это такое. Существует даже комментарий в нижней части вызова это:
Эта страница должна сделать его явным, что справочная таблица может иметь вид schema_name.tbl_name, и что соединения между базами данных, таким образом, Возможное.
Schema Object Names страница ничего не говорит о квалификационных именах, но есть суб-страница под названием Identifier Qualifiers, в котором говорится, что столбец таблицы можно назвать с использованием синтаксиса db_name.tbl_name.col_name
. На странице ничего не говорится о возможности ссылаться на таблицы с использованием db_name.tbl_name
.
Но, если вы можете обратиться к колонке с использованием db_name.tbl_name.col_name
, это будет иметь смысл только, если вы также можете обратиться к таблице с использованием db_name.tbl_name
, что означает, что вы можете получить доступ к всем базам данных с помощью одного Connection
, если вы в порядке, чтобы квалифицировать имена таблиц в операторах SQL.
Как отметил @MarkRotteveel в комментарии, вы также можете переключить базу данных с помощью метода Connection.setCatalog(String catalog)
.
Это отражено в MySQL Connector/J 5.1 Developer Guide:
Первоначальная база данных для подключения
Если база данных не указан, то соединение осуществляется с базой данных по умолчанию. В этом случае вызовите метод
setCatalog()
в экземпляре Connection или полностью укажите имена таблиц, используя имя базы данных (то естьSELECT dbname.tablename.colname FROM dbname.tablename...
) в вашем SQL. Открытие соединения без указания используемой базы данных обычно полезно только при создании инструментов, которые работают с несколькими базами данных, например с менеджерами баз данных GUI.Примечание: Всегда используйте метод
Connection.setCatalog()
указать нужную базу данных в приложениях JDBC, а неUSE database
заявления.
Вы также можете переключаться между базами данных с помощью 'Connection.setCatalog (..)'; это может облегчить жизнь в некоторых ситуациях. –
@MarkRotteveel Я не пробовал с MySQL, но вы уверены, что это ['setCatalog()'] (https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html# setCatalog (java.lang.String)), а не ['setSchema()'] (https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#setSchema (java.lang .String))? – Andreas
См. Реализацию: ['ConnectionImpl.setCatalog'] (https://github.com/mysql/mysql-connector-j/blob/release/5.1/src/com/mysql/jdbc/ConnectionImpl.java#L4869) и [ 'ConnectionImpl.setSchema'] (https://github.com/mysql/mysql-connector-j/blob/release/5.1/src/com/mysql/jdbc/ConnectionImpl.java#L5439). См. Также комментарий к 'setSchema', который говорит _", пока мы не перевернем каталог/схему, это не-op "_. Базы данных в MySQL, по-видимому, представляют собой сочетание каталога (хранится отдельно) и схемы (обработка запросов). –
- 1. Oracle - несколько баз данных на одном сервере, проблема подключения
- 2. Как запустить несколько баз данных Neo4j на одном сервере?
- 3. MySQL Транзакция через несколько баз данных InnoDB на одном сервере
- 4. Несколько баз данных (datacontext) на одном сервере без MS DTC
- 5. Подключить несколько баз данных в одном контроллере cakephp 2
- 6. Создание нескольких баз данных на одном сервере с использованием Neo4j
- 7. Соедините две таблицы из разных баз данных на одном сервере
- 8. Подключение нескольких баз данных с помощью JDBC
- 9. запрос баз данных на одном сервере с linq
- 10. Как получить все имена баз данных на одном связанном сервере?
- 11. Несколько баз данных на одном SQL Server с именем instance
- 12. Как подключить два разных файла excel в качестве баз данных на одном сервере в java?
- 13. пытается реплицировать таблицу в несколько баз данных на подчиненном сервере
- 14. Несколько баз данных на одном сервере или отдельных базах данных на виртуальных серверах
- 15. Как подключить несколько баз данных с одним приложением в asp.net
- 16. JDBC - Подключение нескольких баз данных
- 17. Запросы данные из двух баз данных на одном сервере
- 18. Настройка баз данных master/slave на одном сервере?
- 19. Как запустить несколько баз данных MongoDB на удаленном сервере
- 20. Объединение нескольких баз данных на одном сервере SQL Server
- 21. Список всех триггеров из всех баз данных на одном сервере
- 22. Несколько приложений PHP на одном сервере PaaS
- 23. jdbc и запрашивать несколько баз данных с использованием одного параметра
- 24. Sequelize несколько баз данных на разных серверах
- 25. Как использовать Hibernate с несколькими базами данных на одном сервере
- 26. Spring Boot JPA: Как подключить несколько баз данных?
- 27. SqlAlchemy Несколько баз данных Python
- 28. couchdb несколько баз данных
- 29. Как подключить несколько внешних баз данных в Magento?
- 30. Невозможно подключить несколько баз данных PostgreSQL, используя SPRING + HIbernate
Читайте на http://stackoverflow.com/questions/10593647/how-to-create-multiple-database-connections-for-different-databases-in-java –