数据库连接的两种实现方式(读取配置文件)——DBCP&C3P0;DBCP实现连接代码,C3P0实现连接代码——包含完整代码

2023-11-05


两种数据库连接实现方式

第一种方式:DBCP

DBCP使用流程

  1. 导jar包
  2. 使用DBCP创建数据库连接对象
    DataSource ds=BasicDataSourceFactory.createDatasource("一个存储连接信息的properties集合");
  3. 使用DataSource,调用连接池对象的getConnection方法


编写的.properties文件:dbcpconfig.properties

#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/demobase
username=root
password=root


JDBCUtils中的代码:

public class JDBCUtils {
	
	private static DataSource ds;
	//DatatSource 对象只会创建一个
	static {
		try {
		//创建DBCP的数据库连接对象
		//1、获取配置文件对应的输入流
		InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
		//2、将流中数据读入集合
		Properties pro = new Properties();
		pro.load(in);
		ds = BasicDataSourceFactory.createDataSource(pro);
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException();
		}
	}
	
	public static DataSource getDs(){
		return ds;
	}
}



Test中的代码:

public class Test {
	public static void main(String[] args) throws Exception  {
		Connection con = JDBCUtils.getDs().getConnection();
		//使用连接
		PreparedStatement ps = con.prepareStatement("select * from teacher");
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			System.out.println(rs.getString(1) + "   " + rs.getString(2));
		}
		//关闭
		rs.close();
		ps.close();
		//和以前不同
		con.close();
	}
}

第二种方式:C3P0

C3P0使用流程:

  1. 导jar包
  2. 使用C3P0创建对应的数据库连接对称
    DataSource ds=new ComboPooledDataSource();
    注意:
    ·虽然有配置文件,但是配置文件没有字节读取,c3p0会自动读取配置文件,此过程隐藏了;
    ·保存配置文件存在的路径在src中, 其实复制到bin目录下面了,真正读取是从bin目录下查找的;
    ·配置文件的文件名必须固定,即 c3p0-config.xml;
  3. 具体的连接对象使用与DBCP一样


编写的XML文件:c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<!-- 默认配置,如果没有指定则使用这个配置
		默认配置最常用
		
		建议放在最开头。
		放其他地方也没问题
	 -->
	<default-config>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/demobase</property>
		<property name="user">root</property>
		<property name="password">root</property>
		<property name="checkoutTimeout">30000</property>
		<property name="idleConnectionTestPeriod">30</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
		<user-overrides user="test-user">
			<property name="maxPoolSize">10</property>
			<property name="minPoolSize">1</property>
			<property name="maxStatements">0</property>
		</user-overrides>
	</default-config>


JDBCUtils中的代码:
public class JDBCUtils {
	//1、读取配置信息
	private static DataSource ds = new ComboPooledDataSource();
	public static DataSource ds(){
		return ds;
	}
}

Test中的代码:

public class Test {
	public static void main(String[] args) throws Exception {
		Connection con = JDBCUtils.ds().getConnection();
		//使用连接
		PreparedStatement ps = con.prepareStatement("select * from teacher");
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			System.out.println(rs.getString(1) + "   " + rs.getString(2));
		}
		//关闭
		rs.close();
		ps.close();
		//和以前不同
		con.close();
	}
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库连接的两种实现方式(读取配置文件)——DBCP&C3P0;DBCP实现连接代码,C3P0实现连接代码——包含完整代码 的相关文章

  • 如何从 MySQL 数据查询创建 XML 文件?

    我想知道一种仅使用 MySQL 查询创建 XML 文件的方法 根本不使用任何脚本语言 有关于这个主题的书籍 教程吗 UPDATE 我想澄清一下 我想使用 sql 查询将 XML 数据转发到 php 脚本 Here s 关于从 MySQL S
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • MYSQL:如何在同一查询中联接两个表,两次引用同一个表

    我有两张桌子 我正在尝试将下面的示例两个表与表 1 引用表 2 两次结合起来 例如 如果我查看表 1 组 2 和成员 7 它应该查找表 2 中的 ID 并给出输出 Group Members Name Name 2 7 Blue Dog T
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 如何获取 WebElement 的父级[重复]

    这个问题在这里已经有答案了 我试过了 private WebElement getParent final WebElement webElement return webElement findElement By xpath 但我得到
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • 在 MySQL 数据库中保持 TEXT 字段唯一的最佳方法

    我想让 TEXT 字段的值在我的 MySQL 表中唯一 经过小型研究 我发现由于性能问题 每个人都不鼓励在 TEXT 字段上使用 UNIQUE INDEX 我现在想用的是 1 创建另一个字段来包含 TEXT 值的哈希值 md5 text v
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • 逃离的正确方法是什么?使用 Oracle 12c MATCH_RECOGNIZE 时 JDBCPreparedStatement 中的字符?

    以下查询在 Oracle 12c 中是正确的 SELECT FROM dual MATCH RECOGNIZE MEASURES a dummy AS dummy PATTERN a DEFINE a AS 1 1 但它不能通过 JDBC
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • Java &= 运算符应用 & 或 && 吗?

    Assuming boolean a false 我想知道是否这样做 a b 相当于 a a b logical AND a is false hence b is not evaluated 或者另一方面 这意味着 a a b Bitwi
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false

随机推荐

  • nginx七层代理和四层转发的理解

    先来理解一下osi七层模型 应用层 应用层是ISO七层模型的最高层 它直接与用户和应用程序交互 提供用户与网络的接口 它包括各种应用协议 如HTTP FTP SMTP等 用于实现特定应用的功能和通信 表示层 表示层负责数据的格式转换 加密和
  • Introduction of moving block bootstrap (MBB)algorithm

    Because we can not use usual bootstrap sampling method to get subsamples from time series dataset then the MBB was propo
  • 软件测试人员的职业晋升之路

    关于软件测试行业的职业发展方向 在网络上总能看到各种各样的问题 有关注零基础能不能入行的 有关注25岁入行晚不晚的 还有关注35岁后的职业发展方向的 在此过程中 看到很多行业大佬分享了自己的工作经验 也给出了很多自己的建议 要想在测试行业有
  • Ubuntu18.04 安装 TensorFlow (GPU)

    重新在台式机上学习深度学习 Ubuntu18 04 Tensorflow gpu cuda8 0 cuDNN6 0 一 准备工作 有一些不是必需的 1 安装pip 打开终端输入命令 sudo apt get install python p
  • Netty实战(二)第一个Netty程序

    第一个Netty程序 一 环境准备 二 Netty 客户端 服务器概览 三 编写 Echo 服务器 3 1 ChannelHandler 和业务逻辑 3 2 引导服务器 四 编写 Echo 客户端 4 1 通过 ChannelHandler
  • AI芯片学习小结4-谷歌TPU与脉动阵列

    AI芯片学习小结4 谷歌TPU与脉动阵列 文章 In Datacenter Performance Analysis of a Tensor Processing Unit 时间 2017 Reference 深入理解Google TPU的
  • STM32 局部数组使用过大溢出到全局影响代码运行

    一 问题 在函数内定义局部数组大小为400 发现其影响了串口接收中断 二 原因 通过动态调试得知 其分配的局部数组地址与全局的串口结构体的空间部分重合造成了寄存器异常中断开启失败 出现此原因在于分配的栈不够造成局部数组溢出占用全局空间 如果
  • 基站信号强度些问题

    1 package myapplication com myjizhansj 2 3 import android content Context 4 import android graphics Color 5 import andro
  • 服务器装win7无限重启吗,win7系统重装系统后无限重启电脑的解决方法

    很多小伙伴都遇到过win7系统重装系统后无限重启电脑的困惑吧 一些朋友看过网上零散的win7系统重装系统后无限重启电脑的处理方法 并没有完完全全明白win7系统重装系统后无限重启电脑是如何解决的 今天小编准备了简单的解决办法 只需要按照1
  • 流处理架构选型

    greenplum flink 做流处理 从批处理ETL到流式处理 一个来自Netflix的案例 https juejin im entry 5aa73ccd6fb9a028c81285cb greenplum oracle12C 分布式R
  • 【项目设计】高并发内存池(二)[高并发内存池整体框架设计|threadcache]

    C 学习历程 入门 博客主页 一起去看日落吗 持续分享博主的C 学习历程 博主的能力有限 出现错误希望大家不吝赐教 分享给大家一句我很喜欢的话 也许你现在做的事情 暂时看不到成果 但不要忘记 树 成长之前也要扎根 也要在漫长的时光 中沉淀养
  • Zebra基本配置

    前言 Zebra是一个路由软件包 提供基于TCP IP路由服务 支持RIPv1 RIPv2 RIPng OSPFv2 OSPFv3 BGP 4 和 BGP 4 等众多路由协议 Zebra还支持BGP特性路由反射器 Route Reflect
  • 关于vue3刷新页面后,数据丢失问题

    本文重点解决刷新页面数据丢失的问题 一般情况下 调试过程中 数据会变空 部署到服务器后 如果刷新 可能会报404 NOT FOUND 一开始解决 思路大概是将数据存储到piniaStore中 但是interesting 刷新页面Store照
  • ISO/OSI七层协议中的下三层在AIX中的实现

    复杂度4 5 机密度4 5 最后更新2021 04 29 ISO 国际标准化组织 international standard organize OSI 开放系统互连模型 open system interconnection ISO专门制
  • Android VNDK限制下的解决方案

    你有没有遇到过这个错误呢 F linker CANNOT LINK EXECUTABLE system bin xxx library libxxx so not found 首先在android生态里 一般的应用开发者 不会遇到这个问题
  • Sonar常见问题修改

    Sonar常见问题修改 1 SonarLint简介与安装 1 1 SonarLint简介 1 2 SonarLint安装与配置 1 2 1 IDEA 插件在线安装 1 2 2 IDEA 插件离线安装 1 2 3 SonarLint Gene
  • 响应式编程介绍

    响应式编程简介 原文 你应该对响应式编程这个新事件有点好奇吧 尤其是与之相关的部分框架 Rx Bacon js RAC等等 在缺乏好的资源的情况下 学习响应式编程成为痛苦 我开始学的时候 做死地找各种教程 结果发现有用的只是极少部分 而且这
  • Java Excel转图片

    1 在pom xml添加依赖
  • 秒懂边缘云

    作者 辰舒 背景 当下 各类门户网站 短视频 剧集观看 在线教育等内容生态快速发展 互联网流量呈现爆发式增长 在靠近用户的地方就有CDN节点 用户通过手机或PC畅快浏览网页 视频 图片时 都需要CDN提供加速 作为经历二十多年发展的技术 C
  • 数据库连接的两种实现方式(读取配置文件)——DBCP&C3P0;DBCP实现连接代码,C3P0实现连接代码——包含完整代码

    两种数据库连接实现方式 第一种方式 DBCP DBCP使用流程 导jar包 使用DBCP创建数据库连接对象 DataSource ds BasicDataSourceFactory createDatasource 一个存储连接信息的pro