热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oraclec3p0dword60,web_day10dbcpc3p0dbutils

createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放

create database mydb character set utf8;

alert database mydb character set utf8;

1.自定义连接池为了不去经常创建连接和释放对象而占用大量资源

-----JdbcTool3 -----------获得connection(通过·)和释放资源------------

public class JdbcTool3 {

private static String drive;

private static String sql;

private static String username;

private static String passord;

static {

try {

ClassLoader classLoader = JdbcTool3.class.getClassLoader();

InputStream input = classLoader.getResourceAsStream("db.properties");

Properties properties = new Properties();

properties.load(input);

drive = properties.getProperty("driver");

sql = properties.getProperty("url");

username = properties.getProperty("username");

passord = properties.getProperty("psaaword");

} catch (Exception e) {

e.printStackTrace();

}

}

public static Connection connection() {

try {

Class.forName(drive);

} catch (Exception e) {

e.printStackTrace();

}

Connection con = null;

try {

con = DriverManager.getConnection(sql, username, passord);

} catch (Exception e) {

e.printStackTrace();

}

return con;

}

public static void relese(Statement sta, Connection con, ResultSet res) {

if (res != null) {

try {

res.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (con != null) {

try {

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (sta != null) {

try {

sta.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

---------有了conn之后便是创建几个放入连接池,在使用完后同样回收到连接池---

implements 是重写接口所以需要全部覆盖

public class MyDatasource implements DataSource{

private static LinkedList pool&#61;new LinkedList<>();

static{

Connection conn&#61;null;

for (int i &#61; 0; i <5; i&#43;&#43;) {

conn&#61;JdbcTool3.connection();

pool.add(conn);

}

}

/**放回池中

* &#64;param conn

*/

public static void backConnection(Connection conn) {

pool.add(conn);

}

&#64;Override

public Connection getConnection() throws SQLException {

if (pool.size()&#61;&#61;0) {

Connection conn&#61;null;

for (int i &#61; 0; i <5; i&#43;&#43;) {

conn&#61;JdbcTool3.connection();

pool.add(conn);

}

}

return pool.remove(0);

}

修饰者设计模式&#xff1a;为了将.close修改成把链接放回连接池而不是释放

--------修改原本的功能重写一个类继承connection&#xff0c;为了修改.close方法--------

因为实例化所以同样需要重写prepareStatement方法

public class ColectionMackClose implements Connection {

private static LinkedList pool;

private static Connection con;

public ColectionMackClose(Connection con, LinkedList pool) {

this.pool &#61; pool;

this.con &#61; con;

}

&#64;Override

public void close() throws SQLException {

pool.add(con);

}

&#64;Override

public PreparedStatement prepareStatement(String sql) throws SQLException {

return con.prepareStatement(sql);

}

----------获得con之后用新的类ColectionMackClose 包装得到重写的con---------

public class MyDatasource1 implements DataSource{

private static LinkedList pool&#61;new LinkedList<>();

static{

Connection conn&#61;null;

for (int i &#61; 0; i <5; i&#43;&#43;) {

conn&#61;JdbcTool3.connection();

ColectionMackClose myCollection &#61; new ColectionMackClose(conn, pool);

pool.add(myCollection);

}

}

&#64;Override

public Connection getConnection() throws SQLException {

if (pool.size()&#61;&#61;0) {

Connection conn&#61;null;

for (int i &#61; 0; i <5; i&#43;&#43;) {

conn&#61;JdbcTool3.connection();

ColectionMackClose myCollection &#61; new ColectionMackClose(conn, pool);

pool.add(myCollection);

}

}

return pool.remove(0);

}

2.c3p0连接池&#xff0c;使用较多

导包

从SourceForge 网站下载最新的版本

http://sourceforge.net/projects/c3p0/

出现找不到或无法加载主类 cn.fb.textDatasource.C3p0Text&#xff0c;从项目文件夹.path文件中删除多余路径

注意添加两个文件c3p0-0.9.5.2.jar和mchange-commons-java-0.2.11.jar(有时候没mchange也行&#xff0c;和版本有关&#xff1f;)

public static ComboPooledDataSource getCombpdatasource() {

return datasourse;

}

public static Connection getCon() {

try {

return datasourse.getConnection();

} catch (SQLException e) {

throw new RuntimeException(e);

}

}

}

-----------text----------------

public void textadd2() {

Connection con &#61; null;

PreparedStatement pst &#61; null;

try {

con &#61;C3p0Utiles.getCon();

String sql &#61; "insert into product values(?,?,?,null)";

pst &#61; con.prepareStatement(sql);

pst.setString(1, "p022");

pst.setString(2, "云河2");

pst.setDouble(3, 30);

int row &#61; pst.executeUpdate();

if (row > 0) {

System.out.println("添加成功");

} else {

System.out.println("添加失败");

}

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}finally {

JdbcTool3.relese(pst, con, null);

}

}

3.dbcp

Properties pro &#61; new Properties();

pro.load(input);

dataSource &#61; BasicDataSourceFactory.createDataSource(pro);

} catch (Exception e) {

throw new RuntimeException(e);

}

}

public static DataSource getdatasource() {

return dataSource;

}

public static Connection getconnection() {

try {

return dataSource.getConnection();

} catch (SQLException e) {

throw new RuntimeException(e);

}

}

-------------properties----放在src下-----------

driver&#61;com.mysql.jdbc.Driver

url&#61;jdbc:mysql://localhost:3306/web09?useUnicode&#61;true&characterEncoding&#61;utf8

username&#61;root

psaaword&#61;0616

4.dbutils

Map map &#61; qr.query(sql, new MapHandler()[把一行记录转换成一个Map&#xff0c;其中键为列名称&#xff0c;值为列值], "S_2000");

System.out.println(map);

}

&#64;Test

public void fun2() throws SQLException {

DataSource ds &#61; JdbcUtils.getDataSource();

QueryRunner qr &#61; new QueryRunner(ds);

String sql &#61; "select * from tab_student";

List> list &#61; qr.query(sql, new MapListHandler()[把转换集转换成List&#xff0c;其中每个Map对应一行记录]);

for(Map map : list) {

System.out.println(map);

}

}

&#64;Test

public void fun3() throws SQLException {

DataSource ds &#61; JdbcUtils.getDataSource();

QueryRunner qr &#61; new QueryRunner(ds);

String sql &#61; "select * from tab_student where number&#61;?";

Student stu &#61; qr.query(sql, new BeanHandler(Student.class)[把结果集转换成一个Bean对象&#xff0c;在使用BeanHandler时需要指定Class&#xff0c;即Bean的类型], "S_2000");

System.out.println(stu);

}

&#64;Test

public void fun4() throws SQLException {

DataSource ds &#61; JdbcUtils.getDataSource();

QueryRunner qr &#61; new QueryRunner(ds);

String sql &#61; "select * from tab_student";

List list &#61; qr.query(sql, new BeanListHandler(Student.class));[需要将列名化为属性把结果集转换成List&#xff0c;其中每个Bean对应一行记录]

for(Student stu : list) {

System.out.println(stu);

}

}

&#64;Test

public void fun5() throws SQLException {

DataSource ds &#61; JdbcUtils.getDataSource();

QueryRunner qr &#61; new QueryRunner(ds);

String sql &#61; "select * from tab_student";

List list &#61; qr.query(sql, new ColumnListHandler("name")[多行单例处理器&#xff0c;即获取name列数据]);

for(Object s : list) {

System.out.println(s);

}

}

&#64;Test

public void fun6() throws SQLException {

DataSource ds &#61; JdbcUtils.getDataSource();

QueryRunner qr &#61; new QueryRunner(ds);

String sql &#61; "select count(*) from tab_student";

Number number &#61; (Number)qr.query(sql, new ScalarHandler()[单行单列处理器&#xff0c;一般用于聚合查询&#xff0c;在使用ScalarHandler时可以指定列名&#xff0c;如果不指定&#xff0c;默认为第1列。]);

int cnt &#61; number.intValue();[对聚合函数的查询结果&#xff0c;有的驱动返回的是Long&#xff0c;有的返回的是BigInteger&#xff0c;所以这里我把它转换成Number&#xff0c;Number是Long和BigInteger的父类&#xff01;然后我再调用Number的intValue()或longValue()方法就OK了。]

System.out.println(cnt);

}

&#64;Test

public void add() {

try {

QueryRunner qr &#61; new QueryRunner(C3p0Utiles.getCombpdatasource());

String sql &#61; "insert into product values(?,?,?,null);";

Object[] product &#61; { "p017", "抱抱", 2000 };

int row &#61; qr.update(sql, product);

if (row > 0) {

System.out.println("添加成功");

} else {

System.out.println("添加失败");

}

} catch (SQLException e) {

e.printStackTrace();

}



推荐阅读
  • 主调|大侠_重温C++ ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
  • 深入解析Android中的SQLite数据库使用
    本文详细介绍了如何在Android应用中使用SQLite数据库进行数据存储。通过自定义类继承SQLiteOpenHelper,实现数据库的创建与版本管理,并提供了具体的学生信息管理示例代码。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • CentOS 6.8 上安装 Oracle 10.2.0.1 的常见问题及解决方案
    本文记录了在 CentOS 6.8 系统上安装 Oracle 10.2.0.1 数据库时遇到的问题及解决方法,包括依赖库缺失、操作系统版本不兼容、用户权限不足等问题。 ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
author-avatar
小桃爱学PHP
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有