Como faço para configurar manualmente um DataSource em Java?

Estou tentando seguir o tutorial JDBC da Sun em http://java.sun.com/docs/books/tutorial/jdbc/basics/connecting.html

Dá o seguinte código de exemplo:

DataSource ds = (DataSource) org.apache.derby.jdbc.ClientDataSource() ds.setPort(1527); ds.setHost("localhost"); ds.setUser("APP") ds.setPassword("APP"); Connection con = ds.getConnection(); 

Esse código não é compilado porque a interface DataSource não possui nenhum desses methods, exceto pelo método getConnection() chamado por último.

(Aqui está o javadoc: http://java.sun.com/javase/6/docs/api/javax/sql/DataSource.html )

o que estou perdendo?

Edit: Eu estou realmente tentando se conectar ao MySQL ( com.mysql.jdbc ) e não consigo encontrar o javadoc para isso. Vou aceitar uma resposta que me aponte para:

1) documentação para com.mysql.jdbc referente a um DataSource que eu possa entender ou

2) dá um exemplo a seguir para o código do tutorial, para qualquer database.

Basicamente, no JDBC, a maioria dessas propriedades não é configurável na API assim, ao invés disso, elas dependem da implementação. A maneira como o JDBC lida com isso é permitindo que a URL de conexão seja diferente por fornecedor.

Então, o que você faz é registrar o driver para que o sistema JDBC possa saber o que fazer com o URL:

  DriverManager.registerDriver((Driver) Class.forName("com.mysql.jdbc.Driver").newInstance()); 

Então você forma o URL:

  String url = "jdbc:mysql://[host][,failoverhost...][:port]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]" 

E finalmente, use-o para obter uma conexão:

  Connection c = DriverManager.getConnection(url); 

Em um JDBC mais sofisticado, você se envolve com pools de conexão e afins, e os servidores de aplicativos geralmente têm sua própria maneira de registrar drivers no JNDI e você procura um DataSource de lá e chama getConnection nele.

Em termos de quais propriedades o MySQL suporta, veja aqui .

EDIT: Mais um pensamento, tecnicamente apenas ter uma linha de código que faz Class.forName (“com.mysql.jdbc.Driver”) deve ser suficiente, como a class deve ter seu próprio inicializador estático que registra uma versão, mas às vezes um O driver JDBC não, portanto, se você não tiver certeza, há pouco dano em registrar um segundo, ele cria um object duplicado no memeory.

Uma coisa que você pode querer olhar é o projeto DBCP Commons . Ele fornece um BasicDataSource que é configurado de forma semelhante ao seu exemplo. Para usá-lo, você precisa do JDBC JAR do fornecedor do database em seu caminho de class e precisa especificar o nome da class do driver do fornecedor e a URL do database no formato adequado.

Editar:

Se você quiser configurar um BasicDataSource para MySQL, você faria algo assim:

 BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUsername("username"); dataSource.setPassword("password"); dataSource.setUrl("jdbc:mysql://:/"); dataSource.setMaxActive(10); dataSource.setMaxIdle(5); dataSource.setInitialSize(5); dataSource.setValidationQuery("SELECT 1"); 

O código que precisa de um DataSource pode usar isso.

DataSource é específico do fornecedor, para o MySql você pode usar o MysqlDataSource que é fornecido no jar do conector MySql Java:

  MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setDatabaseName("xyz"); dataSource.setUser("xyz"); dataSource.setPassword("xyz"); dataSource.setServerName("xyz.yourdomain.com"); 

Eu acho que o exemplo está errado – javax.sql.DataSource não tem essas propriedades também. Seu DataSource precisa ser do tipo org.apache.derby.jdbc.ClientDataSource , que deve ter essas propriedades.

use MYSQL como Exemplo: 1) use pools de conexão de database: por exemplo: Apache Commons DBCP, também, você precisa de um pacote jar basicDataSource em seu classpath

 @Bean public BasicDataSource dataSource() { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/gene"); ds.setUsername("root"); ds.setPassword("root"); return ds; } 

2) use o driver baseado em JDBC que geralmente é usado se você não considerar o pool de conexão:

 @Bean public DataSource dataSource(){ DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/gene"); ds.setUsername("root"); ds.setPassword("root"); return ds; } 

O javadoc para DataSource a que você se refere é do pacote errado. Você deve olhar para javax.sql.DataSource . Como você pode ver, esta é uma interface. A configuração do nome do host e da porta depende da implementação, ou seja, do driver JDBC que você está usando.

Eu não verifiquei os javadocs do Derby, mas suponho que o código deve compilar assim:

 ClientDataSource ds = org.apache.derby.jdbc.ClientDataSource() ds.setHost etc.... 
Intereting Posts