java--获取数据库连接1(单例)
来源:互联网 发布:人物识别软件 编辑:程序博客网 时间:2024/06/06 07:48
应用程序直接获取链接的缺点:
用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。
package cn.hncu.pubs;import java.sql.Connection;import java.sql.DriverManager;import java.util.Properties;public class ConnFacory { public static Connection conn; private ConnFacory(){ } static{ try { Properties p=new Properties(); p.load(ConnFacory.class.getClassLoader().getResourceAsStream("jdbc.properties")); String dirver=p.getProperty("driver"); String url=p.getProperty("url"); String name=p.getProperty("username"); String pwd=p.getProperty("password"); Class.forName(dirver); conn=DriverManager.getConnection(url, name, pwd); System.out.println("conn:"+conn); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection(){ return conn; }}
jdbc.properties
##MySQLdriver=com.mysql.jdbc.Driverurl=jdbc:mysql://127.0.0.1:3306/hncu?useUnicode=true&characterEncoding=utf-8username=rootpassword=1234size=3##Oracle#driver=oracle.jdbc.driver.OracleDriver#url=jdbc:oracle:thin:@127.0.0.1:1521:orcl#username=scott#password=tiger
演示:
package cn.hncu.tx;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import cn.hncu.pubs.ConnFacory;//使用的是单例的连接工厂ConnFactory--不能使用多线程,需要创建多例public class TxDemo { public static void main(String[] args) throws Exception { Connection con=ConnFacory.getConnection(); Statement st = con.createStatement(); try { con.setAutoCommit(false); st.execute("INSERT INTO person VALUES('P200','赵子龙','1')"); new MyThread(1).start(); new MyThread(2).start(); new MyThread(3).start(); new MyThread(4).start(); new MyThread(5).start(); Thread.sleep(1000); con.commit();//因为是单线程共用一个con,提交事务其他线程(用户)就不能再使用 System.out.println("main线程提交一个事务...."); } catch (Exception e) { con.rollback(); System.out.println("main线程回滚一个事务....."); }finally{// con.setAutoCommit(true);//因为是单线程共用一个con,如果关了事物其他线程(用户)就不能使用// con.close();//因为是单线程共用一个con,如果关了连接其他线程(用户)就不能使用 } }}class MyThread extends Thread{ private int num; public MyThread(int num){ this.num = num; } @Override public void run() { Connection con=ConnFacory.getConnection(); try { Statement st = con.createStatement(); con.setAutoCommit(false); String sql = "INSERT INTO person VALUES('P09"+num+"','赵子龙','1')"; if(num==3){ sql = "INSERT INTO person VALUES('P092','赵子龙','1')"; }else{ Thread.sleep(100); } st.executeUpdate(sql); con.commit();//因为是单线程共用一个con,提交事务其他线程(用户)就不能再使用 System.out.println(num+"线程提交一个事务...."); } catch (Exception e) { try { con.rollback(); System.out.println(num+"线程回滚一个事务....."); } catch (SQLException e1) { e1.printStackTrace(); } }finally{// try {// con.setAutoCommit(true);//因为是单线程共用一个con,如果关了事物其他线程(用户)就不能使用// con.close();//因为是单线程共用一个con,如果关了连接其他线程(用户)就不能使用// } catch (SQLException e) {// e.printStackTrace();// } } }}
1 0
- java--获取数据库连接1(单例)
- java 获取数据库连接
- java获取数据库连接对象
- 单例模式--数据库连接
- java连接oracle数据库连接类(单例模式)
- 单例模式创建数据库连接
- 单例 封装PHP 数据库连接
- java中关于数据库连接的获取
- Java中JDBC获取各种类型数据库连接
- java JDBC获取不同数据库连接操作
- 单例模式实现C3P0数据库连接池
- php应用数据库连接中的单例模式
- 以单例模式实现数据库连接
- 数据库连接池 单例模式的实现
- Spring获取单例getSingleton(1)
- 单例java类获取spring的bean方法
- 通过java反射机制,获取单例模式中的方法
- Java 单例模式获取Properties文件内容
- PHPStrom全局搜索快捷键
- 基于OpenCV批量处理文件夹中的图片的方法
- colinux访问windows文件
- 【Android】子Fragment获取父Fragment
- mac下安装nginx
- java--获取数据库连接1(单例)
- sql性能优化
- 百度上传插件WEB UPLOADER教程_WEB UPLOADER使用DEMO实例
- 线程池工作机制与原理
- 自动轮播图简单实现
- collider 碰撞检测
- javascript基础笔记(十二)之js的Date对象
- 微信公众号平台开发(三):几大微信接口的调用
- Log4j按级别输出日志到不同文件配置分析