jdbc-如何在Java中手动配置数据源?
我正尝试在[http://java.sun.com/docs/books/tutorial/jdbc/basics/connecting.html]上遵循Sun的JDBC教程。
它提供了以下示例代码:
DataSource ds = (DataSource) org.apache.derby.jdbc.ClientDataSource()
ds.setPort(1527);
ds.setHost("localhost");
ds.setUser("APP")
ds.setPassword("APP");
Connection con = ds.getConnection();
由于com.mysql.jdbc接口除了最后调用的DataSource方法之外,没有任何方法,因此不会编译此代码。
(以下是Javadoc:[http://java.sun.com/javase/6/docs/api/javax/sql/DataSource.html)]
我想念什么?
编辑:我实际上正在尝试连接到MySQL(com.mysql.jdbc),但找不到该Javadoc。 我会接受一个答案,指出我要么:
1)我能理解的有关DataSource的com.mysql.jdbc的文档,或者
2)给出一个示例,说明任何数据库的教程代码应该是什么。
6个解决方案
126 votes
您可能要看的一件事是Commons DBCP项目。 它提供了一个BasicDataSource,其配置与您的示例非常相似。 要使用它,您需要在类路径中使用数据库供应商的JDBC JAR,并且必须以正确的格式指定供应商的驱动程序类名称和数据库URL。
编辑:
如果要为MySQL配置DataSource,则应执行以下操作:
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");
然后,需要DataSource的代码可以使用它。
ColinD answered 2020-07-27T16:07:25Z
21 votes
基本上,在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中注册驱动程序的方式,并且您从那里查找数据源,然后在其上调用getConnection。
关于MySQL支持的属性,请参见此处。
编辑:再想一想,从技术上讲,只要有一行代码做Class.forName(“ com.mysql.jdbc.Driver”)就足够了,因为该类应该有自己的静态初始化器,该初始化器注册一个版本,但有时 JDBC驱动程序没有,因此,如果您不确定,注册第二个驱动程序几乎没有什么害处,它只是在内存中创建一个重复的对象。
Yishai answered 2020-07-27T16:06:51Z
20 votes
DataSource是特定于供应商的,对于MySql,您可以使用MySql Java连接器jar中提供的MysqlDataSource:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setDatabaseName("xyz");
dataSource.setUser("xyz");
dataSource.setPassword("xyz");
dataSource.setServerName("xyz.yourdomain.com");
Luke answered 2020-07-27T16:07:45Z
3 votes
以MYSQL为例:1)使用数据库连接池:例如:Apache Commons 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;
}
Fujian lin answered 2020-07-27T16:08:10Z
2 votes
我认为该示例是错误的-DataSource也没有这些属性。 您的DataSource必须为org.apache.derby.jdbc.ClientDataSource类型,该类型应具有这些属性。
Vinay Sajip answered 2020-07-27T16:08:30Z
1 votes
您所引用的DataSource的Javadoc的软件包错误。 您应该查看javax.sql.DataSource。 如您所见,这是一个接口。 主机名和端口名的配置取决于实现方式,即所使用的JDBC驱动程序。
我没有检查过Derby javadocs,但我想代码应该像这样编译:
ClientDataSource ds = org.apache.derby.jdbc.ClientDataSource()
ds.setHost etc....
Kees de Kooter answered 2020-07-27T16:08:54Z