Я читаю спецификацию Java JDBC (vr. 4) и включил это утверждение:
DataSource - этот интерфейс был представлен в JDBC 2.0. Пакет API. Это предпочтительнее, чем DriverManager, потому что это позволяет сведения о базовом источнике данных, который будет прозрачным для Приложение
Я пытаюсь понять, в чем разница между Connection
и DataSource
, и почему она существует. Я имею в виду, что в приведенном выше блоке сказано, что сведения об источнике данных прозрачны для приложения, но не будут ли внешние свойства базы данных, такие как имя пользователя, пароль, URL и т.д., Помещаться в файл свойств, а затем использовать DriverManager таким же образом?
И интерфейс DataSource
создан только для того, чтобы иметь общий способ возврата соединений, которые можно объединять в пулы и т.д.? В Java EE реализует ли сервер приложений этот интерфейс и развернутые приложения, чтобы иметь ссылку на источник данных вместо соединения?
Ответ 1
Лучшая масштабируемость и обслуживание
Для диспетчера драйверов вам необходимо знать все детали (хост, порт, имя пользователя, пароль, класс драйвера) для подключения к БД и получения подключений. Вывод их в файл свойств ничего не меняет в том, что вам нужно их знать.
Используя DataSource, вам нужно знать только имя JNDI. AppServer заботится о деталях и настраивается не поставщиком клиентских приложений, а администратором, в котором размещено приложение.
Масштабируемость:
Предположим, вам нужно создать соединения самостоятельно, как бы вы справились с изменением нагрузки, иногда у вас есть 10 пользователей, иногда у вас 1000, вы не можете просто получить соединение, когда вам это нужно, и позже "освободить" его, чтобы сервер базы данных не выйти из соединений, что приводит вас к пулу соединений. DriverManager не предоставляет его, DataSource делает.
Если вы собираетесь программировать пул соединений самостоятельно, вам необходимо использовать DriverManager, в противном случае используйте DataSource.
Ответ 2
DriverManager.
- препятствует производительности приложения, поскольку соединения создаются/закрываются в классах Java.
- не поддерживает объединение пулов.
DataSource
- повышает производительность приложений, поскольку соединения не создаются/закрываются внутри класса, они управляются сервером приложений и могут быть извлечены во время выполнения.
- он предоставляет средство создания пула соединений
- полезно для корпоративных приложений
Ответ 3
Ниже код показывает два способа получения соединения.
Нет необходимости знать о URL-адресе в случае mySqlDataSource
, поскольку эта строка комментируется.
public class MySqlDataSourceTest {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
/************** using MysqlDataSource starts **************/
MysqlDataSource d = new MysqlDataSource();
d.setUser("root");
d.setPassword("root");
// d.setUrl("jdbc:mysql://localhost:3306/manavrachna");
d.setDatabaseName("manavrachna");
Connection c = (Connection) d.getConnection();
/************** using MysqlDataSource ends**************/
/************** using DriverManager start **************/
Class.forName("com.mysql.jdbc.Driver");
Connection c=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/manavrachna","root","root");
/************** using DriverManager ends **************/
Statement st=(Statement) c.createStatement();
ResultSet rs=st.executeQuery("select id from employee");
while(rs.next())
{
System.out.println(rs.getInt(1));
}
}
}
Ответ 4
Мы можем получить соединение с использованием источника данных следующим образом. Используйте соединение для выполнения любого запроса базы данных.
DataSource datasource = (DataSource) new InitialContext().lookup(dataSourceName);
Connection connection = datasource.getConnection();
Ответ 5
Объекты DataSource могут предоставлять пулы соединений и распределенные транзакции, поэтому вам может понадобиться использовать DataSource, если вам нужна одна из этих двух или двух этих функций.