我正在尝试编写一个实现DataSource的类。这看起来很简单,但我看到的所有示例都是这样的类:
public class ConnectionPoolingBean implements SessionBean {
....
}
我希望看到更像这样的东西:
public class MyDataSource implements DataSource {
....
}
另外,我不明白连接是如何工作的。 getConnection()方法仅接受用户名和密码的参数。那么我如何连接到我的数据库呢? 最后,我需要了解的是如何连接到我的数据库并使用DataSource从查询返回结果集。我只是没有看到任何关于如何在WebApp上编写类来使用它的明确示例。
这是我一直在阅读的内容,现在让我感到困惑。 https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html
答案 0 :(得分:0)
为您的用例使用任何连接池。如果您使用的是app服务器,则可以使用app server connection pool或使用opensource dbcp连接池机制。
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
实施例
import org.apache.commons.dbcp2.BasicDataSource;
public class DataBaseUtility
{
private static BasicDataSource dataSource;
private static BasicDataSource getDataSource()
{
if (dataSource == null)
{
BasicDataSource ds = new BasicDataSource();
ds.setUrl("jdbc:mysql://localhost/test");
ds.setUsername("root");
ds.setPassword("password");
ds.setMinIdle(5);
ds.setMaxIdle(10);
ds.setMaxOpenPreparedStatements(100);
dataSource = ds;
}
return dataSource;
}
public static void main(String[] args) throws SQLException
{
try (BasicDataSource dataSource = DataBaseUtility.getDataSource();
Connection connection = dataSource.getConnection();
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM account");)
{
System.out.println("The Connection Object is of Class: "+connection.getClass());
try (ResultSet resultSet = pstmt.executeQuery();)
{
while (resultSet.next())
{
System.out.println(resultSet.getString(1) + "," + resultSet.getString(2) + "," + resultSet.getString(3));
}
}
catch (Exception e)
{
connection.rollback();
e.printStackTrace();
}
}
}
}