DataSource 的理解

DriverManager 因为不支持数据连接池,所以在应用中一般都使用DataSource.

DataSource 的3种实现:
1.简单的实现,和DriverManager 一样.
2.数据连接池的实现
3.分布式事务的实现,同时也实现数据连接池.

1.简单实现

一般来说数据库供应商提供的jdbc driver 会提供javax.sql.DataSource接口的简单实现类.如mysql 的就是com.mysql.jdbc.jdbc2.optional.MysqlDataSource

下面是一个例子:

MysqlDataSource ds= new MysqlDataSource();//直接创建DataSource 对象,然后设置属性就可以了.
ds.setUser("root");
ds.setPassword("");
ds.setServerName("localhost");
ds.setPort(3306);
//  ds.setDatabaseName("tyh_rate");

String sql="insert into user(u_name,password,create_time) values(?,?,?)";
try(Connection con=ds.getConnection()){
    con.setCatalog("tyh_rate");
    PreparedStatement pstmt=con.prepareStatement(sql);
    pstmt.setString(1, "a");
    pstmt.setString(2, "123");
    pstmt.setDate(3, Date.valueOf("2015-12-04"));
    pstmt.executeUpdate();
}
2.使用连接池的 方式.

在mysql 提供的jdbc driver 包下有一个类是:
com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource 应该是javax.sql.ConnectionPoolDataSource 的实现类.

注意:
ConnectionPoolDataSource 不是数据库连接池,而是用于生成连接池连接的,这个连接可以被保存在数据库连接池中.
实现这个接口的类将会被DataSource 实现类来使用,并用于生成数据库连接池.
stackflow 有一个相关的解释

个人理解:
HikariCP 这种第三方连接池库就是javax.sql.DataSource 的实现类.
也可以在独立的java 程序中使用数据连接池(without tomcat):

        HikariConfig config = new HikariConfig();
        config.setMaximumPoolSize(5);
        config.setJdbcUrl("jdbc:mysql://localhost:3306");
        config.setUsername("root");
        config.setPassword("");
        config.addDataSourceProperty("cachePrepStmts", "true");
        config.addDataSourceProperty("prepStmtCacheSize", "250");
        config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");

        HikariDataSource ds = new HikariDataSource(config);


        String sql="insert into user(u_name,password,create_time) value(?,?,?)";
        try(Connection con=ds.getConnection()){
            con.setCatalog("tyh_rate");
            PreparedStatement pstmt=con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            pstmt.setString(1, "a");
            pstmt.setString(2, "123");
            pstmt.setDate(3, Date.valueOf("2015-12-04"));
            pstmt.executeUpdate();

        }
        Thread.sleep(10000); //用于暂停jvm,便于查看数据库连接
    }

查看主机上的mysql 连接有5条.

sudo netstat -antpul |grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      4787/mysqld     
tcp        0      0 127.0.0.1:3306          127.0.0.1:51480         ESTABLISHED 4787/mysqld     
tcp        0      0 127.0.0.1:3306          127.0.0.1:51477         ESTABLISHED 4787/mysqld     
tcp        0      0 127.0.0.1:3306          127.0.0.1:51478         ESTABLISHED 4787/mysqld     
tcp        0      0 127.0.0.1:3306          127.0.0.1:51479         ESTABLISHED 4787/mysqld     
tcp        0      0 127.0.0.1:3306          127.0.0.1:51481         ESTABLISHED

加深理解
javase/tutorial/jdbc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据源(dataSource)是指用于填充数据的对象或接口。它可以是任何实现了System.Collections.IEnumerable接口的对象,如System.Data.DataView、System.Collections.ArrayList、System.Collections.Hashtable、数组或实现了IListSource接口的对象。 在Java中,JDBC2.0提供了javax.sql.DataSource接口,它负责建立与数据库的连接。当在应用程序中访问数据库时,通过引用DataSource接口来获取数据库连接对象,而不需要编写连接数据库的代码。数据源会建立多个数据库连接,并将这些连接保存在数据库连接池中。当需要访问数据库时,只需从连接池中获取一个空闲的数据库连接。在程序访问数据库结束后,数据库连接会被放回连接池中,以便其他程序继续使用。这样可以减少频繁建立和断开数据库连接的资源消耗,提高性能。 数据源也可以作为JNDI(Java命名和目录接口)资源的一种形式。通过将"DataSource"字符串与实际的DataSource对象绑定,可以方便地获取数据源。使用数据库连接池的好处是避免了每次访问数据库都需要重新建立连接和销毁连接的开销,同时也减少了内存和CPU的使用。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [C#数据绑定控件中的DataSource属性浅谈](https://download.csdn.net/download/weixin_38577922/13061123)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [DataSource数据源简单理解](https://blog.csdn.net/qq_40910541/article/details/80771607)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值