Подтвердить что ты не робот

Как вручную настроить DataSource в Java?

Я пытаюсь следовать учебнику Sun JDBC в http://java.sun.com/docs/books/tutorial/jdbc/basics/connecting.html

Он дает следующий пример кода:

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

Connection con = ds.getConnection();

Этот код не компилируется, потому что интерфейс DataSource не имеет ни одного из этих методов, кроме метода getConnection(), вызванного последним.

(Здесь javadoc: http://java.sun.com/javase/6/docs/api/javax/sql/DataSource.html)

Что мне не хватает?

Edit: Я на самом деле пытаюсь подключиться к MySQL (com.mysql.jdbc), и я не могу найти javadoc для этого. Я приму ответ, который указывает мне на:

1) документация для com.mysql.jdbc относительно DataSource, которую я могу понять, или

2) дает пример для того, для чего должен быть код учебника, для любой базы данных.

4b9b3361

Ответ 1

В основном в JDBC большинство этих свойств не настраиваются в API, как это, они зависят от реализации. Способ JDBC заключается в том, чтобы разрешить URL-адрес соединения для каждого поставщика.

Итак, что вы делаете, это зарегистрировать драйвер, чтобы система JDBC могла знать, что делать с URL-адресом:

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

Затем вы формируете URL-адрес:

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

И, наконец, используйте его, чтобы получить соединение:

 Connection c = DriverManager.getConnection(url);

В более сложном JDBC вы участвуете в пулах подключений и т.п., а серверы приложений часто имеют свой собственный способ регистрации драйверов в JNDI и оттуда вы просматриваете DataSource и вызываете getConnection на нем.

Что касается свойств, поддерживаемых MySQL, см. здесь.

EDIT: Еще одна мысль, технически имеющая только строку кода, которая выполняет Class.forName( "com.mysql.jdbc.Driver" ), должна быть достаточной, так как класс должен иметь свой собственный статический инициализатор, который регистрирует версию, но иногда драйвер JDBC этого не делает, поэтому, если вы не уверены, нет никакого вреда в регистрации второго, он просто создает дублирующий объект в memeory.

Ответ 2

Одна вещь, на которую вы можете обратить внимание, - это проект Commons DBCP. Он обеспечивает BasicDataSource, который настроен аналогично вашему примеру. Чтобы использовать это, вам нужен JDBC JAR-сервер базы данных в вашем пути к классам, и вы должны указать имя класса драйвера поставщика и URL-адрес базы данных в соответствующем формате.

Edit:

Если вы хотите настроить BasicDataSource для MySQL, вы должны сделать что-то вроде этого:

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");

Тогда код, который нуждается в DataSource, может использовать это.

Ответ 3

DataSource является специфичным для вендора, для MySql вы можете использовать MysqlDataSource, который предоставляется в java-контейнере Java MySql:

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

Ответ 4

Я думаю, что пример неверен - javax.sql.DataSource также не имеет этих свойств. Ваш DataSource должен быть типа org.apache.derby.jdbc.ClientDataSource, который должен иметь эти свойства.

Ответ 5

используйте MYSQL в качестве примера: 1) использовать пулы подключений к базе данных: например: Apache Commons DBCP, вам также понадобится пакет jar basicDataSource в вашем пути к классам

@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) используйте JDBC-драйвер, который обычно используется, если вы не рассматриваете пул соединений:

@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;
}

Ответ 6

Javadoc для DataSource, на который вы ссылаетесь, имеет неправильный пакет. Вы должны посмотреть javax.sql.DataSource. Как вы видите, это интерфейс. Конфигурация имени хоста и порта зависит от реализации, то есть от используемого драйвера JDBC.

Я не проверял javadocs Derby, но я предполагаю, что код должен быть скомпилирован следующим образом:

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