Я читаю спецификацию Java JDBC (vr. 4) и привел это утверждение:
DataSource - этот интерфейс был представлен в API необязательного пакета JDBC 2.0. Его предпочтительнее, чем DriverManager, поскольку он позволяет сведениям о базовом источнике данных быть прозрачными для приложения.
Я пытаюсь понять, в чем разница между a Connection
и a DataSource
и почему она существует. Я имею в виду, что в приведенном выше блоке говорится, что сведения об источнике данных прозрачны для приложения, но не будут ли внешние свойства базы данных, такие как имя пользователя, пароль, URL-адрес и т. Д., В файле свойств, а затем использовать DriverManager, работать таким же образом?
И создан ли DataSource
интерфейс только для того, чтобы иметь общий способ возврата подключений, которые можно объединять в пул и т. Д.? В Java EE реализует ли сервер приложений этот интерфейс и развёрнутые приложения, чтобы они имели ссылку на источник данных вместо соединения?
источник
If you are going to program a connection pool then you have to use DriverManager, otherwise go with Datasource.
- вы перевернули имена?DriverManager
DataSource
источник
В приведенном ниже коде показаны два способа подключения.
Нет необходимости знать 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)); } } }
источник
DataSource
объекты могут предоставлять пулы соединений и распределенные транзакции, поэтому вам, возможно, придется использовать,DataSource
если вам нужна одна из этих функций или обе.источник
Мы можем получить соединение с использованием источника данных следующим образом. Используйте соединение для выполнения любого запроса к базе данных.
DataSource datasource = (DataSource) new InitialContext().lookup(dataSourceName); Connection connection = datasource.getConnection();
источник