数据源(DataSources)

本文介绍了Java中JDBC的不足,如频繁建立和关闭连接带来的资源消耗,并探讨了Statement与PreparedStatement的区别。接着,文章讨论了数据连接池DBCP的作用,如何提高JDBC效率,并详细阐述了阿里开源的数据源框架Druid的使用流程。最后,总结了JDBC的更新流程,包括数据源和连接池的应用。
摘要由CSDN通过智能技术生成

数据源(DataSource)

jdbc的不足?

jdbc是java 和数据库的桥梁(交互)

JDBC的步骤:

  • 注册驱动 Class.forName()——只需要一次

  • 建立连接 Connection ——每一次都需要建立连接

  • 预处理对象PreparedStatement

  • 执行SQL

  • 关闭连接 ——每一次都需要关闭

每一次都需要:建立连接(消耗资源)——关闭连接(释放资源)

Statement对象和PreparedStatement对象的关系?

(1)是继承关系,PreparedStatement 继承于 Statement。

public interface PreparedStatement extends Statement`

(2)PreparedStatement相比Statement可以防止SQL注入漏洞,信息更安全 .

Statement : 采用的sql拼接的方式,会出现sql注入漏洞,造成信息泄露。

   String s = "猫"; 
   String k = "波斯猫' OR 1='1";
     "Select * from pet_tab WHERE pet_category='" +s+"' AND pet_kind=“ '+k+"'"

      SELECT * FROM pet_tab WHERE pet_category='猫' AND pet_kind ='xxx' 
在方法上切换数据源需要使用到 Spring 框架的动态数据源切换技术,具体实现步骤如下: 1. 在 Spring 配置文件中配置多个数据源,例如 mysql_EF、mysql_JPA 等; 2. 创建动态数据源类 DynamicDataSource,该类继承自 AbstractRoutingDataSource,并重写 determineCurrentLookupKey 方法,该方法用于动态切换数据源; 3. 在 determineCurrentLookupKey 方法中,通过 ThreadLocal 存储当前数据源的 key 值,具体实现可以参考代码示例: ``` public class DynamicDataSource extends AbstractRoutingDataSource { private static final ThreadLocal<String> dataSourceKey = new InheritableThreadLocal<>(); public static void setDataSourceKey(String dataSource) { dataSourceKey.set(dataSource); } @Override protected Object determineCurrentLookupKey() { return dataSourceKey.get(); } } ``` 4. 在需要切换数据源的方法中,通过 DynamicDataSource.setDataSourceKey 方法设置当前数据源的 key 值,例如: ``` public void queryData(String dataSource) { DynamicDataSource.setDataSourceKey(dataSource); // 执行查询操作 } ``` 5. 在方法执行完毕后,需要清除 ThreadLocal 中存储的数据源 key 值,以免影响其他方法的数据源切换,例如: ``` public void queryData(String dataSource) { DynamicDataSource.setDataSourceKey(dataSource); try { // 执行查询操作 } finally { DynamicDataSource.clearDataSourceKey(); } } ``` 通过以上步骤,即可在方法上动态切换数据源。注意,此处仅提供一种实现方式,具体实现可能会因项目框架、技术选型等因素而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值