如何手动配置Java的数据源?(How do I manually configure a Data

2019-07-03 19:10发布

我试图按照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 )

我在想什么?

编辑:实际上,我试图连接到MySQL( com.mysql.jdbc ),我无法找到该的Javadoc。 我会接受指向我到任何一个答案:

1)文件com.mysql.jdbc关于DataSource ,我可以理解,或

2)给出了一个榜样本教程的代码应该是什么,对任何数据库。

Answer 1:

基本上在JDBC大多数属性都不一样,在API中配置的,而他们依靠的实现。 JDBC处理这个问题的方法是通过允许连接URL是每个供应商的不同。

所以,你要做的就是注册的驱动程序,以便JDBC系统可以知道如何处理URL做:

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

然后你形成的网址:

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

最后,用它来获得一个连接:

 Connection c = DriverManager.getConnection(url);

在更复杂的JDBC,你会参与连接池之类的,和应用程序服务器往往有自己的注册在JNDI驱动的方式,你从那里查找一个DataSource,并调用的getConnection就可以了。

在什么性质MySQL支持方面,看这里 。

编辑:还有一个想法,在技术上只是有一个行代码做的Class.forName(“com.mysql.jdbc.Driver”)应该是不够的,因为该类应该有自己的静态初始化一个注册到的版本,但有时JDBC驱动程序没有,所以如果你不知道,有在注册的第二个危害不大,它只是创造了memeory重复的对象。



Answer 2:

你可能想看看一件事是下议院DBCP项目。 它提供了一个的BasicDataSource ,其配置相当类似,你的榜样。 要使用你所需要的数据库厂商的JDBC JAR在类路径中,你必须指定供应商的驱动程序类的名称,并在适当的格式数据库URL。

编辑:

如果你想配置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 ,然后可以使用。



Answer 3:

数据源是特定于供应商,为MySQL中,你可以使用它在MySQL的Java连接罐子提供MysqlDataSource:

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


Answer 4:

我认为例子是错误的- javax.sql.DataSource没有这些属性之一。 你的DataSource必须是类型org.apache.derby.jdbc.ClientDataSource ,它应该具有那些特性。



Answer 5:

使用MySQL作为例子:1)使用数据库连接池:例如:阿帕奇百科全书DBCP,另外,你需要的BasicDataSource jar包在类路径

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


Answer 6:

你提到的数据源的Javadoc是错误的包。 你应该看看的javax.sql.DataSource 。 正如你可以看到这是一个接口。 主机和端口名称配置依赖于实现,即你正在使用JDBC驱动程序。

我没有检查德比的javadoc,但我想,代码应该这样进行编译:

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


文章来源: How do I manually configure a DataSource in Java?