我试图按照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)给出了一个榜样本教程的代码应该是什么,对任何数据库。
基本上在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重复的对象。
你可能想看看一件事是下议院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
,然后可以使用。
数据源是特定于供应商,为MySQL中,你可以使用它在MySQL的Java连接罐子提供MysqlDataSource:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setDatabaseName("xyz");
dataSource.setUser("xyz");
dataSource.setPassword("xyz");
dataSource.setServerName("xyz.yourdomain.com");
我认为例子是错误的- javax.sql.DataSource
没有这些属性之一。 你的DataSource
必须是类型org.apache.derby.jdbc.ClientDataSource
,它应该具有那些特性。
使用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;
}
你提到的数据源的Javadoc是错误的包。 你应该看看的javax.sql.DataSource 。 正如你可以看到这是一个接口。 主机和端口名称配置依赖于实现,即你正在使用JDBC驱动程序。
我没有检查德比的javadoc,但我想,代码应该这样进行编译:
ClientDataSource ds = org.apache.derby.jdbc.ClientDataSource()
ds.setHost etc....