1、什么是数据源
从字面意思上看就是指数据的源头,我们都知道一般把数据存在数据库中,获取和修改数据等操作也是从数据库中拿取数据的,所以数据的源头应该指存放数据的数据库;那这里说的数据源是指数据库吗?肯定不是的。
我们这里说的数据源是操作数据库的一个抽象概念,体现在我们的代码中就是
c3p0、dbcp、druid等等,这些很多是第三方提供的数据源Jar包,我们在使用的时候要引入对应的数据源。
数据源做的就省略在连接数据库时一系列复杂的操作,我们在使用JDBC操作数据库时要 获取驱动、建立连接 等等一系列复杂的操作,且每次使用都要这样做代码产生了冗余。在使用数据源后,我们直接在数据源中配置连接数据库的信息
然后直接使用数据源获取连接就可以了。
代码如下:
public static void main(String[] args) throws Exception {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT");
dataSource.setUser("root");
dataSource.setPassword("123456");
Connection connection = dataSource.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("select * from t_book where id = ?");
preparedStatement.setString(1, "27");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString(1) + " "
+ resultSet.getString(2) + " "
+ resultSet.getString(3));
}
// 5.关闭连接
preparedStatement.close();
connection.close();
}
2、连接池
数据源分为两类:带连接池的和不带连接池的
在我们不使用连接池的应用中每次操作数据库都要先建立连接,使用完后释放连接。这样做非常耗费资源。在使用连接池后应用会先建立多个连接,有使用需要的时候就取一个连接,使用完后不释放连接,而是把连接方回连接池,供下一个需要连接到数据库的程序使用,这样就节省了很多资源,不用反复创建和释放连接。