java访问数据库方式_java数据库访问(二)—JDBC方式(配合连接池)

上文记录了最基础的JDBC连接数据库的方法,但能看出一个问题,就是要不断的重复去创建connection和关闭connection,如果在对数据库的访问比较频繁的情况下,这种处理方式方式在性能方面是不合适的,下面使用JDBC配合数据库连接池来访问数据库。

除了mysql的驱动,还需引入数据库连接池,本次选用的是dbcp2(类似的还有c3p0、阿里的druid),其实数据库连接池的原理都类似,了解一个,上手其他的就非常容易。

引入依赖:

org.apache.commons

commons-dbcp2

2.5.0

本次要查询的数据:

615463f5d0a5ecd0162139a9583d671e.png

查询service代码:

packagecom.test.database;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.Statement;importjavax.annotation.PostConstruct;importorg.apache.commons.dbcp2.BasicDataSource;importorg.springframework.stereotype.Service;

@Servicepublic classJdbcPooledService {

Connection connection;

BasicDataSource basicDataSource= newBasicDataSource();

@PostConstruct //用于进行初始化操作,此处初始化连接池public voidinitPool() {

System.out.println("PostConstruct init.....");

basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");

basicDataSource.setUsername("root");

basicDataSource.setPassword("root");

basicDataSource.setUrl("jdbc:mysql://localhost:3306/test");

}public void testJdbc() throwsException {

System.out.println(basicDataSource.getNumActive());

connection=basicDataSource.getConnection();

Statement statement=connection.createStatement();

String sql= "select * from user";

ResultSet resultSet=statement.executeQuery(sql);while(resultSet.next()) {

System.out.println(resultSet.getString("name"));

}

resultSet.close();

statement.close();

connection.close(); //连接池的连接同样需要调用close方法,但此时的close不是关闭连接,而是将连接还回连接池

}

}

测试类:

packagecom.test;importorg.springframework.beans.BeansException;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcom.test.database.JdbcPooledService;public classMain {public static void main(String[] args) throwsBeansException, Exception {

ApplicationContext context= new ClassPathXmlApplicationContext("spring-context.xml");

context.getBean(TestService.class).test();//context.getBean(JdbcService.class).testJdbc();

for (int i = 0; i < 10; i++) {

System.out.println(i);

context.getBean(JdbcPooledService.class).testJdbc();

}

}

}

打印输出为:

PostConstruct init.....

test service

0

0

tim

1

0

tim

2

0

tim

3

0

tim

4

0

tim

5

0

tim

6

0

tim

7

0

tim

8

0

tim

9

0

tim

若在调用结束时不关闭(将连接还回连接池)connection:

packagecom.test.database;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.Statement;importjavax.annotation.PostConstruct;importorg.apache.commons.dbcp2.BasicDataSource;importorg.springframework.stereotype.Service;

@Servicepublic classJdbcPooledService {

Connection connection;

BasicDataSource basicDataSource= newBasicDataSource();

@PostConstruct//用于进行初始化操作,此处初始化连接池

public voidinitPool() {

System.out.println("PostConstruct init.....");

basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");

basicDataSource.setUsername("root");

basicDataSource.setPassword("root");

basicDataSource.setUrl("jdbc:mysql://localhost:3306/test");

}public void testJdbc() throwsException {

System.out.println(basicDataSource.getNumActive());

connection=basicDataSource.getConnection();

Statement statement=connection.createStatement();

String sql= "select * from user";

ResultSet resultSet=statement.executeQuery(sql);while(resultSet.next()) {

System.out.println(resultSet.getString("name"));

}

resultSet.close();

statement.close();//connection.close();

}

}

继续调用测试类,结果为:

PostConstruct init.....

test service

0

0

tim

1

1

tim

2

2

tim

3

3

tim

4

4

tim

5

5

tim

6

6

tim

7

7

tim

8

8

现象是建立了8个连接就不再建立了,原因是没有调用connection的close方法,而dbcp2的默认最大连接数是8,所以已经到了最大连接数,注意在使用连接池获取连接时,务必关闭连接。

默认最大连接数:

public static final int DEFAULT_MAX_TOTAL = 8;

连接池获取的连接调用close方法的源码最终调用为:

方法声明:

public synchronized void close() throws SQLException

关键调用:

pool.returnObject(this);

将此连接还回到连接池。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超频真的不难!G3258超频4.5GHz全攻略

奔腾G3258搭配主板详解【pconline 应用】目前DIY市场上最火热的装机组合莫过于奔腾20周年纪念版处理器G3258搭配B85芯片组主板&#xff0c;只要通过适当的超频&#xff0c;相对较低投入也能来不错的性能体验&#xff0c;因此在奔腾G3258还没上市时&#xff0c;业界对其充满期待…

Java入门到精通——基础篇之static关键字

一、概述static 关键字是声明静态变量&#xff0c;静态方法用的。static的含义是属于类且不属于类对象的变量和函数。二、static的产生。在创建对象的时候除非用new创建那个类的对象&#xff0c;否则实际上并没有获得任何对象只有当执行new来创建对象时数据存储空间才被分配&am…

Java 给编译器看的注释--Annotation

文章目录1. 系统内建的Annotation2. 自定义Annotation3. Retention4. 反射 与 Annotation5. Target6. Documented7. Inherited将配置直接写入到程序之中&#xff1a;Annotation 1. 系统内建的Annotation Override&#xff0c;Deprecated&#xff0c;SuppressWarnings 等 cla…

kafka启动_Kafka安装部署——单节点

1.1 Kafka的单节点部署在实际的工作中&#xff0c;经常使用Kafka作为消息队列&#xff0c;然而并不是每一种业务场景都需要集群版的Kafka&#xff0c;有时单节点的Kafka就能满足了业务的需求。以下就是单节点kafka的部署流程&#xff1a;1.1.1 安装包下载从Kafka官网下载最…

Maven 入门 (1)—— 安装

Maven 入门 &#xff08;1&#xff09;—— 安装 http://blog.csdn.net/kakashi8841/article/details/17371837 1、下载maven安装包 http://maven.apache.org/download.cgi 2、基于Unix的操作系统&#xff08;Linux、Solaris 和 Mac OS X&#xff09; 解压上面下载的包&#xf…

中文新闻分类 数据集_三亚试点用大数据推行垃圾分类:刷卡扔垃圾,分类有奖励|界面新闻...

文丨海南日报 高懿 周月光10月19日电 &#xff0c;垃圾分类如何推行&#xff1f;三亚市引进智能装备&#xff0c;在6个社区开展试点&#xff0c;运用大数据分析&#xff0c;通过行为激励&#xff0c;引导市民积极配合垃圾分类。19日上午&#xff0c;记者现场采访试点社区垃圾分…

为什么a*算法采用哈密尔顿距离作为启发函数比不在位数为启发函数的性能要好?_KDD2019: 使用神经网络为A*搜索算法赋能 --以个性化路径推荐为例...

本文系 KDD2019 论文的解读&#xff1a;Wang, Jingyuan, Ning Wu, Wayne Xin Zhao, Fanzhang Peng, and Xin Lin. "Empowering A* Search Algorithms with Neural Networks for Personalized Route Recommendation." InProceedings of the 25th ACM SIGKDD Internati…

java socket tomcat_在Tomcat环境下使用socket通信

最近在做一个APP的服务器端&#xff0c;但是APP和服务器端使用的是HTTP的通信协议&#xff0c;而另一方与服务器端通信却使用的是自定义的通信协议。具体的系统拓扑如下&#xff1a;为了完成以上的需求&#xff0c;一般的解决方案有两种&#xff1a;自己实现服务器端程序&#…

安卓手机主题软件_类似主题软件下载-类似主题安卓官方版下载v2.6.6.3

类似主题app&#xff0c;介绍给大家&#xff0c;是一款可以让我们在线进行主题变幻&#xff0c;拥有更多特色主题风格的服务平台。有了它用户就可以体验不同机型的主题风格&#xff0c;不论苹果还是安卓都是支持的&#xff0c;喜欢的不妨来下载看看&#xff01;【类似主题应用功…

Java 文件 IO 操作

文章目录1. File类2. RandomAccessFile类3. 流类3.1 字节流3.2 字符流3.3 管道流3.4 ByteArrayInputStream、ByteArrayOutputStream3.5 System.in、System.out3.6 打印流 PrintStream3.7 DataInputStream、DataOutputStream3.8 合并流3.9 字节流与字符流的转换3.10 IO包类层次关…

java dsp_GitHub - Onemeaning/JavaDsp: 数字信号处理(DSP)方面的Java封装,包含常用的一些处理方法,如滤波、信号变换等等。...

JavaDsp数字信号处理(DSP)方面的Java封装&#xff0c;包含常用的一些处理方法&#xff0c;如滤波、信号变换等等。该类库是我本科毕业设计中的一部分&#xff0c;绝大部分都是我自己写实现的&#xff0c;很少部分算法有我另外几个朋友参与讨论和实现&#xff0c;在此表示感谢。…

简单banner制作

简单做了一个banner,效果不是很好&#xff0c;主要温习了蒙版知识和滤镜的使用&#xff0c;其中使用&#xff08;图像 > 调整 > 照片滤镜&#xff0c; 可以让图片融合得更协调&#xff0c;另外图片上添加斜线做背景&#xff0c;这些小技巧在做banner时&#xff0c;能打造…

苹果11怎么录屏_苹果11怎么设置骚扰电话号码

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。系统版本为&#xff0c;苹果11设置拦截骚扰电话的方法如下&#xff1a;1、首先打开手机设置&#xff0c;找到【勿扰模式】&#xff1b;2、将勿扰模式开启后&#xff0c;点击下方【允…

BigTable的开源实现:HBase数据库

learn from 从0开始学大数据&#xff08;极客时间&#xff09; 文章目录1. 两种数据库2. HBase 可伸缩架构3. HBase 可扩展数据模型4. HBase高性能存储1. 两种数据库 关系数据库&#xff08;RDBMS&#xff09;缺点&#xff1a; 糟糕的 海量数据处理能力、僵硬的设计约束 从 …

java toast_Android中Toast的用法简介

Toast是Android中用来显示显示信息的一种机制&#xff0c;和Dialog不一样的是&#xff0c;Toast是没有焦点的&#xff0c;而且Toast显示的时间有限&#xff0c;过一定的时间就会自动消失。下面用一个实例来看看如何使用Toast。1.默认效果代码Toast.makeText(getApplicationCont…

流式计算的代表:Storm、Flink、Spark Streaming

learn from 从0开始学大数据&#xff08;极客时间&#xff09; 文章目录1. Storm2. Spark Streaming3. Flink对存储在磁盘上的数据进行大规模计算处理&#xff0c;大数据批处理对实时产生的大规模数据进行处理&#xff0c;大数据流计算 1. Storm 一些系统 业务逻辑 和 数据处…

windows7正版验证_Windows7 寿终正寝:那些一并消逝的软件你知多少?

IT服务圈儿有温度、有态度的IT自媒体平台来源&#xff1a;太平洋电脑网本月&#xff0c;一代经典操作系统微软Windows 7正式迎来了生命周期的完结。微软宣布&#xff0c;此后将不再为Win7提供任何形式的更新&#xff0c;包括安全更新、稳定性更新和功能更新&#xff1b;而仍在使…

stotybord如何添加子视图_Revit软件技巧合集(建筑构件、视图处理、建筑表现、高级技巧)...

Revit软件技巧合集164套(建筑构件、视图处理、建筑表现、高级技巧)BIM技术在我国建筑行业受到了越来越多的关注&#xff0c;也得到了快速地发展。BIM应用软件也如雨后春笋般的涌现&#xff0c;随着时间的推移&#xff0c;revit在BIM应用中将成为设计利器&#xff0c;而在工程施…

ad域不去用frs_Windows Server 2008搭建AD域控服务器 - 小王同学!

AD域安装过程安装DNS服务器一路下一步这里选安装到这里DNS服务器安装成功&#xff0c;可以在主页面看到我们安装的角色安装DNS服务器后我们需要重启服务器安装AD域服务新增AD域服务角色一路下一步——安装即可两条安装成功提示&#xff0c;重启服务器角色中选择AD域服务&#x…

IE下及标准浏览器下的图片旋转(二)—— Canvas(2)

文章过长&#xff0c;一篇无法保存 IE下及标准浏览器下的图片旋转&#xff08;二&#xff09;—— Canvas&#xff08;1&#xff09; 同样&#xff0c;作为最后&#xff0c;我们使用使用jquery也为canvas写个旋转demo&#xff1a; javascript&#xff1a; $(function () { …