Jak ręcznie skonfigurować źródło danych w Javie?

Próbuję śledzić samouczek Sun JDBC na http://java.sun.com/docs/books/tutorial/jdbc/basics/connecting.html

Podaje następujący przykładowy kod:

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

Connection con = ds.getConnection();

Ten kod nie jest kompilowany, ponieważ interfejs DataSource nie ma żadnej z tych metod, z wyjątkiem metody getConnection() wywołanej jako ostatnia.

(Oto javadoc: http://java.sun.com/javase/6/docs/api/javax/sql/DataSource.html )

Co mi umyka?

Edit: I ' m właściwie próbuję połączyć się z MySQL (com.mysql.jdbc) i nie mogę znaleźć javadoc do tego. Przyjmę odpowiedź, która wskaże mi albo:

1) Dokumentacja dla com.mysql.jdbc dotycząca DataSource, którą mogę zrozumieć, lub

2) daje przykład do naśladowania dla kodu tutoriala powinien być, dla każdej bazy danych.

Author: Eric Wilson, 2009-08-26

6 answers

Zasadniczo w JDBC większość z tych właściwości nie jest konfigurowalna w takim API, raczej zależą od implementacji. Sposób, w jaki JDBC sobie z tym radzi, polega na tym, że adres URL połączenia może być inny dla każdego dostawcy.

Więc to, co robisz, to rejestrowanie sterownika, aby system JDBC wiedział, co zrobić z adresem URL:

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

Następnie tworzysz adres URL:

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

I na koniec użyj go, aby uzyskać połączenie:

 Connection c = DriverManager.getConnection(url);

W bardziej wyrafinowanym JDBC, angażujesz się w pule połączeń i tym podobne, a serwery aplikacji często mają swój własny sposób rejestracji sterowników w JNDI i wyszukujesz stamtąd źródło danych i wywołujesz na nim getConnection.

Jeśli chodzi o właściwości obsługiwane przez MySQL, zobacz tutaj .

EDIT: jeszcze jedna myśl, technicznie po prostu posiadanie linii kodu, która robi klasę.forName ("com.mysql.jdbc.Driver") powinno wystarczyć, ponieważ klasa powinna mieć swój własny statyczny inicjalizator, który rejestruje wersję, ale czasami Sterownik JDBC Nie, więc jeśli nie jesteś pewien, nie ma nic złego w zarejestrowaniu drugiego, po prostu tworzy duplikat obiektu w memeory.

 18
Author: Yishai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 20:33:47

Warto przyjrzeć się projektowiCommons DBCP . Dostarcza BasicDataSource , który jest skonfigurowany dość podobnie do twojego przykładu. Aby go użyć, potrzebujesz JDBC jar dostawcy bazy danych w swojej ścieżce classpath i musisz podać nazwę klasy sterownika dostawcy i adres URL bazy danych w odpowiednim formacie.

Edit:

Jeśli chcesz skonfigurować BasicDataSource dla MySQL, zrób coś takiego:

BasicDataSource dataSource = new BasicDataSource();

dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("username");
dataSource.setPassword("password");
dataSource.setUrl("jdbc:mysql://<host>:<port>/<database>");
dataSource.setMaxActive(10);
dataSource.setMaxIdle(5);
dataSource.setInitialSize(5);
dataSource.setValidationQuery("SELECT 1");

Kod, który wymaga DataSource może to wykorzystać.

 122
Author: ColinD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-27 01:07:17

DataSource jest specyficzne dla dostawcy, dla MySql można użyć MysqlDataSource, który jest dostarczany w MySql Java connector jar:

    MysqlDataSource dataSource = new MysqlDataSource();
    dataSource.setDatabaseName("xyz");
    dataSource.setUser("xyz");
    dataSource.setPassword("xyz");
    dataSource.setServerName("xyz.yourdomain.com");
 17
Author: Luke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-01 21:19:52

Myślę, że przykład jest zły - javax.sql.DataSource nie ma też tych właściwości. Twój DataSource musi być typu org.apache.derby.jdbc.ClientDataSource, który powinien mieć te właściwości.

 2
Author: Vinay Sajip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 19:26:52

Użyj MYSQL jako przykład: 1) Użyj puli połączeń bazodanowych: na przykład: Apache Commons DBCP , również potrzebujesz pakietu basicdatasource jar w swojej 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) Użyj Sterownika opartego na JDBC jest on zwykle używany, jeśli nie bierzesz pod uwagę puli połączeń:

@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;
}
 2
Author: Fujian lin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-10 13:59:55

Javadoc dla DataSource, do którego się odnosisz, jest z niewłaściwego pakietu. Powinieneś spojrzeć na javaxa.sql.DataSource . Jak widać jest to interfejs. Konfiguracja hosta i nazwy portu zależy od implementacji, czyli sterownika JDBC, którego używasz.

Nie sprawdzałem javadocs Derby, ale przypuszczam, że kod powinien się skompilować tak:

ClientDataSource ds = org.apache.derby.jdbc.ClientDataSource()
ds.setHost etc....
 1
Author: Kees de Kooter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 19:23:22