jdbc连接数据scanip_JDBC连接数据库的四种方式:DriverManager,DataSource,DBCP,C3P0

方法1:使用java.sql.DriverManager类

驱动管理器类,用于管理所有注册的驱动程序。

(注:DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。)

常用的两个API

registerDriver(driver)  : 注册驱动类对象

ConnectiongetConnection(url,user,password);  获取连接对象

@Test

public void test1(){

Statement stmt = null;

Connection conn = null;

try {

//1.驱动注册程序 --内部执行了RegisterDriver

Class.forName("com.mysql.jdbc.Driver");

//2.获取连接对象

conn = DriverManager.getConnection(url, user, password);

//3.创建Statement

stmt = conn.createStatement();

//4.准备sql

String sql = "CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender VARCHAR(2))";

//5.发送sql语句,执行sql语句,得到返回结果

int count = stmt.executeUpdate(sql);

//6.输出

System.out.println("影响了"+count+"行!");

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

} finally{

//7.关闭连接(顺序:后打开的先关闭)

if(stmt!=null)

try {

stmt.close();

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException(e);

}

if(conn!=null)

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

}

方法2:使用实现了javax.sql.DataSource接口的子类

javax.sql.DataSource接口

包名:javax.sql

接口名: DataSource

作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。DataSource接口由驱动程序供应商实现。共有三种类型的实现:

1. 基本实现 - 生成标准的 Connection 对象

2. 连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。

3. 分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用。

自己实现DataSource子类这种方法不常用,常用的方法可以参考方法3和方法4

插入一句:Sun公司约定:如果是连接池技术,都需要实现javax.sql.DataSource接口

方法3:DBCP连接池

DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件:

Commons-dbcp.jar:连接池的实现

Commons-pool.jar:连接池实现的依赖库

Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

核心类:BasicDataSource

包名:org.apache.commons.dbcp

类名:ClassBasicDataSource extends Object implements DataSource

Basicimplementation of javax.sql.DataSource that is configured via

JavaBeansproperties. This is not the only way to combine the

commons-dbcp andcommons-pool packages, but provides a "one stop

shopping" solutionfor basic requirements.

2. 两种方式实现连接池

1)硬编码方式

2)配置方式

public class App_DBCP {

// 1. 硬编码方式实现连接池

@Test

public void testDbcp() throws Exception {

// DBCP连接池核心类

BasicDataSource dataSouce = new BasicDataSource();

// 连接池参数配置:初始化连接数、最大连接数 / 连接字符串、驱动、用户、密码

dataSouce.setUrl("jdbc:mysql:///jdbc_demo");//数据库连接字符串

dataSouce.setDriverClassName("com.mysql.jdbc.Driver"); //数据库驱动

dataSouce.setUsername("root");//数据库连接用户

dataSouce.setPassword("root"); //数据库连接密码

dataSouce.setInitialSize(3); // 初始化连接

dataSouce.setMaxActive(6); // 最大连接

// 获取连接

Connection con = dataSouce.getConnection();

con.prepareStatement("delete from admin where id=3").executeUpdate();

// 关闭

con.close();

}

@Test

// 2. 【推荐】配置方式实现连接池, 便于维护

public void testProp() throws Exception {

// 加载prop配置文件

Properties prop = new Properties();

// 获取文件流

InputStream inStream = App_DBCP.class.getResourceAsStream("db.properties");

// 加载属性配置文件

prop.load(inStream);

// 根据prop配置,直接创建数据源对象

DataSource dataSouce = BasicDataSourceFactory.createDataSource(prop);

// 获取连接

Connection con = dataSouce.getConnection();

con.prepareStatement("delete from admin where id=4").executeUpdate();

// 关闭

con.close();

}

}

配置方式实现DBCP连接池,  配置文件中的key与BaseDataSouce中的属性一样:

db.properties

url=jdbc:mysql:///jdbc_demo

driverClassName=com.mysql.jdbc.Driver

username=root

password=root

initialSize=3

maxActive=6

方法4:C3P0连接池

C3P0连接池:

最常用的连接池技术!Spring框架,默认支持C3P0连接池技术!

C3P0连接池,核心类:

CombopooledDataSource ds;

包名:com.mchange.v2.c3p0

类名:ClassComboPooledDataSource  implementsPooledDataSource implements DataSource

使用:

1.      下载,引入jar文件:  c3p0-0.9.1.2.jar

2.      使用连接池,创建连接

a)        硬编码方式

b)        配置方式(xml)

自动加载src下c3p0的配置文件【c3p0-config.xml】

public class App {

@Test

//1. 硬编码方式,使用C3P0连接池管理连接

public void testCode() throws Exception {

// 创建连接池核心工具类

ComboPooledDataSource dataSource = new ComboPooledDataSource();

// 设置连接参数:url、驱动、用户密码、初始连接数、最大连接数

dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc_demo");

dataSource.setDriverClass("com.mysql.jdbc.Driver");

dataSource.setUser("root");

dataSource.setPassword("root");

dataSource.setInitialPoolSize(3);

dataSource.setMaxPoolSize(6);

dataSource.setMaxIdleTime(1000);

// ---> 从连接池对象中,获取连接对象

Connection con = dataSource.getConnection();

// 执行更新

con.prepareStatement("delete from admin where id=7").executeUpdate();

// 关闭

con.close();

}

@Test

//2. XML配置方式,使用C3P0连接池管理连接

public void testXML() throws Exception {

// 创建c3p0连接池核心工具类

// 自动加载src下c3p0的配置文件【c3p0-config.xml】

ComboPooledDataSource dataSource = new ComboPooledDataSource();// 使用默认的配置

// 获取连接

Connection con = dataSource.getConnection();

// 执行更新

con.prepareStatement("delete from admin where id=5").executeUpdate();

// 关闭

con.close();

}

}

总结:

DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。

DataSource比DriverManager好在哪里呢?

1. DataSource创建的connection既有基本实现,也有连接池实现(可以复用,DataSource帮我们实现了复用机制),而DriverManager创建的connection则不能复用(当然自己写连接池,自己来实现复用机制也是可以的,可以参考:使用动态代理实现自定义连接池)。所以sun公司规定连接池技术需要实现DataSource接口。

2. DataSource中封装了DriverManager的使用,使用DataSource的一个好处是可以在外边配置(如C3P0直接修改xml文件,不用自己写配置文件db.properties)。

3. 配置DataSource,由容器来获取Connection并结合连接池的应用比直接使用DriverManager操作JDBC效率高一些(参考:DBCP vs DriverManage效率)。

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

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

相关文章

HTML下拉菜单怎么做成横向,css导航条横向带下拉菜单

cssdiv导航下拉二级菜单竖排效果如何改为横排?,在“下一站”有三个二级竖排菜单,如何能变为横排?困扰了我一天了,让二级菜单变成一行,只需要在竖排的效果上,让二级菜单都浮动起来,这…

java移动端接口测试_使用java如何进行接口测试

关于接口测试, 我们之前介绍过很多方法了, 有postman, soapUI, Jmeter等, 他们各有优势和劣势, 今天和大家分享的是如何用java TestNG来实现接口测试.开始测试之前需要如下准备工作:1. IDE环境, Intellij 或者eclipse, 个人推荐使用Intellij.2. JKD1.8 以上3. Maven 环境 Maven…

html5折叠卡片,基于HTML5折叠卡片式下拉菜单代码

基于HTML5折叠卡片式下拉菜单代码。这是一款基于jQueryCSS3HTML5实现的下拉列表框特效代码。效果图如下:实现的代码。hmtl代码:爱编程爱编程 jQuery特效 CSS3特效 HTML5特效 音效下载 flash动画js代码:(function ($) {var cards $(.card-dro…

fastexcel读取excel追加写入sheet页_python笔记52:python操作excel

主要内容:小目标:掌握excel模块主要内容:excel相关模块,openpyxl安装使用如果看完这篇文章,你还是弄不明excel相关操作; 你来找我,我保证不打你,我给你发100的大红包。1. excel相关操…

HTML音乐播放没声音,网页没有声音但系统显示有声音怎么回事?如何解决?

网友提问:为什么网页没有声音,除了迅雷高清在线影院的视频有声音和本已经下载的歌或视频有声音外,其他网页都没有声音!就是网页没声音,其他一切正常!网页没有声音但系统显示有声音;网页在线视频…

html层次选择器例题,详解强大的jQuery选择器之基本选择器、层次选择器

jQuery允许开发者使用从CSS1到CSS3几乎所有的选择器,以及jQuery独创的高级而复杂的选择器。另外还可以加入插件使其支持XPath选择器,甚至开发者可以编写属于自己的选择器(即选择器插件,参考上篇:jQuery插件原来如此简单——jQuery…

cesium 经纬度绘制点_炫酷大屏地图自定义绘制(一)

现在数据中台的概念炒的火热,那在收集到数据后就要想办法去设计大屏,可视化展现。往往大屏都会涉及到地理位置的显示。对于常见的省市区,网上都已经提供了地理json数据,那对于需要定制化的我们要怎么处理呢?首先我们还…

关于python语言和人工智能下哪个说法不正确_“在资源管理器”窗口中,文件夹图标左侧有“...

【单选题】表示串行数据传输速率的指标为:___。【单选题】串行口工作在方式0时,其波特率:___。【简答题】发布混合碱含量的测定三个锥形瓶的滴定终点颜色【简答题】将自己做的三个锥形瓶的滴定终点颜色拍照发上来(三个瓶子并排摆在白色托盘中)【单选题】Guido van Rossum正式对…

html瞄点四大名著有图片,四大名著手抄报图片图和文字资料

四大名著之【三国演义】罗贯中(1330年一1400年之间),名本,号湖海散人,明代通俗小说家。他的籍贯一说是太原(今山西),一说是钱塘(今浙江杭州),不可确考。据传说,罗贯中曾充任过元末农民起义军张士诚的幕客&a…

shell181网格划分_ANSYS软件中SHELL181单元参数详解(1)

SHELL181单元说明SHELL181单元适合对薄的到具有一定厚度的壳体结构进行分析。它是一个4结点单元,每个结点具有6个自由度:x,y,z方向的位移自由度和绕X,Y,Z轴的转动自由度。(如果应用了薄膜选项的话,那该单元则只有移动自由度了)。简并三角形选…

怎样查询2021高考模拟成绩,2021年高三一模二模三模哪个成绩更接近高考成绩,看看网友是怎么评论...

2021年高三一模二模三模哪个成绩更接近高考成绩虽然大多数人认为一模的成绩最接近高考,基本定型了,但高考变幻莫测,成绩很有可能发生变化,成绩升降都是很难说的。高三一模之后成绩也没有定型,还有最后逆转的机会。高考…

lisp 标记形心_标记-整理算法

定义该算法分为标记和整理两个阶段,标记阶段会遍历并标记活动对象,整理阶段通过数次搜索堆来重新装填活动对象,它们聚集到了堆的一端。lisp2算法forwarding指针表示活动对象的目标地址过程概要初始状态标记结束后整理结束后整理阶段伪代码com…

js遍历json数组给html td赋值,JS实现给json数组动态赋值的方法示例

关注微信公众号JS实现给json数组动态赋值的方法示例转载 更新时间:2017年07月04日 10:19:00 作者:小魏的马仔这篇文章主要介绍了JS实现给json数组动态赋值的方法,结合实例形式分析了javascript针对json数组的遍历、赋值等常用操作技巧,需要的朋友可以…

甘肃民族师范学院计算机科学系,甘肃民族师范学院计算机科学与技术专业2016年在甘肃理科高考录取最低分数线...

类似问题答案衡阳师范学院计算机科学与技术专业2016年在甘肃理科高考录取最低分数线学校 地 区 专业 年份 批次 类型 分数 衡阳师范学院 甘肃 计算机科学与技术 2016 二批 理科 448 学校 地 区 专业 年份 批次 类型 分数 衡阳师范学院 甘肃 计算机科学与技术 2016 二批 理科 44…

python面试题百度云下载_分享三道Python经典面试题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼验证邮箱格式验证邮箱的格式,不同语言的实现大同小异,通过正则表达式是最快捷的匹配方式,但对于不熟悉正则的同学看着一长串匹配符还是比较头痛的,其实也没那么恐怖。熟悉python 中正…

计算机科学与技术专业实习招聘,中科院研究生院招聘GIS或计算机专业实习生

中科院研究生院招聘GIS或计算机专业实习生由于项目需要,中科院研究生院特招聘GIS或计算机方向实习生,具体要求如下:项目名称:油气田WebGIS系统招聘人数:1人(目前已有1人)主要工作是根据油气田生产需要,实现WebGIS支持下…

r语言regexpr函数_R语言学习笔记-文本挖掘之字符处理(1)

在挖掘分析的过程当中对字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台,虽然文本的处理并不是它的强项, 但是R语言还是包含大量的字符串操作工具,本章着重整理了部分常用字符处理函…

html div如何列对其,CSS:自适应N列布局如何解决两端对齐

关于每行N列的这种布局,存在一个两端对齐的问题,因为每一列都会存在一个margin-left或者margin-right,导致最后一个超出父元素的边界。通过一番努力,终于解决了这个遗留很久的问题,废话不多说,先看做完之后…

v380智能快配连接不上怎么办_Win7系统电脑设置连接远程桌面的操作方法

Win7系统电脑远程桌面无法连接怎么办?Win7怎么设置连接远程桌面?请看下文具体操作步骤。一般情况下,对Win7的远程连接只需要5步即可完成远程连接的设置:1)查询并记录远程计算机的IP,开始——运行——输入cmd&#xff0…

计算机专业买win,新买的电脑是win10系统,有的人却费尽心思重装成win7,为什么呢...

简单地说,现在的新电脑几乎都是最新的windows系统,而厂商通常预装的是windows10家庭版,虽说没有多强的功能,但也能够满足我们日常使用的需求。重要的是预装的win10系统是正版的!但不难发现,即便是正版的win…