Czytam specyfikację Java JDBC (vr. 4) i napotkałem takie stwierdzenie:
DataSource - ten interfejs został wprowadzony w interfejsie API pakietu opcjonalnego JDBC 2.0. Jest preferowany w stosunku do DriverManager, ponieważ pozwala na przejrzystość szczegółów dotyczących bazowego źródła danych dla aplikacji
Próbuję zrozumieć, jaka jest różnica między a Connection
i a DataSource
i dlaczego istnieje. Chodzi mi o to, że powyższy blok mówi, że szczegóły dotyczące źródła danych są przezroczyste dla aplikacji, ale czy eksternalizacja właściwości bazy danych, takich jak nazwa użytkownika, hasło, adres URL itp. W pliku właściwości, a następnie użycie narzędzia DriverManager, nie działa w ten sam sposób?
Czy DataSource
interfejs jest tworzony tylko po to, aby mieć wspólny sposób zwracania połączeń, które można łączyć itp.? Czy w Java EE serwer aplikacji implementuje ten interfejs, a aplikacje wdrażane tak, aby miały odniesienie do źródła danych zamiast połączenia?
źródło
If you are going to program a connection pool then you have to use DriverManager, otherwise go with Datasource.
- zamieniłeś imiona?DriverManager
DataSource
źródło
Poniższy kod przedstawia dwa sposoby uzyskania połączenia.
Nie trzeba znać adresu URL w przypadku,
mySqlDataSource
gdy ta linia jest komentowana.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)); } } }
źródło
DataSource
obiekty mogą zapewniać pule połączeń i transakcje rozproszone, więc może być konieczne użycieDataSource
jednej lub obu tych funkcji.źródło
Możemy uzyskać połączenie za pomocą źródła danych w następujący sposób. Użyj połączenia, aby wykonać dowolne zapytanie do bazy danych.
DataSource datasource = (DataSource) new InitialContext().lookup(dataSourceName); Connection connection = datasource.getConnection();
źródło