如何在 Java 中手动配置数据源?

2022-08-31 22:38:10

我正在尝试在 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();

此代码不会编译,因为接口没有这些方法,除了最后调用的方法。DataSourcegetConnection()

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

我错过了什么?

编辑:我实际上正在尝试连接到MySQL(),但我找不到javadoc。我会接受一个答案,指出我:com.mysql.jdbc

1) 我能理解的关于 a 的文档,或com.mysql.jdbcDataSource

2)给出了一个示例,说明对于任何数据库,本教程的代码应该是什么。


答案 1

你可能想看的一件事是Commons DBCP项目。它提供了一个基本数据源,其配置与您的示例非常相似。要使用它,您需要在类路径中使用数据库供应商的 JDBC JAR,并且必须以正确的格式指定供应商的驱动程序类名和数据库 URL。

编辑:

如果你想为MySQL配置一个,你可以做这样的事情:BasicDataSource

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


答案 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 中注册驱动程序的自己方式,您可以从那里查找数据源,并在其上调用 getConnection。

关于MySQL支持哪些属性,请参阅此处

编辑:还有一个想法,从技术上讲,只需有一行代码来执行Class.forName(“com.mysql.jdbc.Driver”)就足够了,因为该类应该有自己的静态初始值设定项来注册一个版本,但有时JDBC驱动程序不会,所以如果你不确定,注册第二个驱动程序几乎没有坏处,它只是在memeory中创建一个重复的对象。


推荐