Estoy leyendo la especificación Java JDBC (vr. 4) y encontré esta declaración:
DataSource: esta interfaz se introdujo en la API de paquete opcional de JDBC 2.0. Se prefiere a DriverManager porque permite que los detalles sobre la fuente de datos subyacente sean transparentes para la aplicación.
Lo que estoy tratando de entender es cuál es la diferencia entre ay Connectiona DataSource, y por qué existe. Quiero decir, el bloque anterior dice que los detalles sobre una fuente de datos son transparentes para la aplicación, pero ¿no funcionaría la externalización de las propiedades de la base de datos como el nombre de usuario, la contraseña, la URL, etc.en un archivo de propiedades y luego usar DriverManager de la misma manera?
¿Y la DataSourceinterfaz se crea solo para tener una forma común de devolver conexiones que se pueden agrupar, etc.? En Java EE, ¿el servidor de aplicaciones implementa esta interfaz y las aplicaciones implementadas tienen una referencia a una fuente de datos en lugar de una conexión?
fuente

If you are going to program a connection pool then you have to use DriverManager, otherwise go with Datasource.- ¿Cambiaste los nombres?DriverManagerDataSourcefuente
El siguiente código muestra dos formas de conectarse.
No es necesario conocer la URL en caso de
mySqlDataSourceque se comente esta línea.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)); } } }fuente
DataSourceLos objetos pueden proporcionar agrupación de conexiones y transacciones distribuidas, por lo que es posible que deba utilizarlasDataSourcesi necesita una de estas funciones o ambas.fuente
Podemos conectarnos usando una fuente de datos de la siguiente manera. Utilice la conexión para realizar cualquier consulta a la base de datos.
DataSource datasource = (DataSource) new InitialContext().lookup(dataSourceName); Connection connection = datasource.getConnection();fuente