java--获取数据库连接1(单例)
2016-11-10 18:18
295 查看
应用程序直接获取链接的缺点:
用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。
jdbc.properties
演示:
用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天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
##MySQL driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/hncu?useUnicode=true&characterEncoding=utf-8 username=root password=1234 size=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(); // } } } }
相关文章推荐
- java代码获取数据库连接并操作数据库用户
- java代码获取数据库连接并操作数据库用户
- 3个java类:连接数据库类,获取文件后缀类,从数据库中读入数据生成XML文件
- java使用JNDI 获取weblogic配置的数据源 连接数据库
- java使用JNDI 获取weblogic配置的数据源 连接数据库
- java 获取jdbc连接,并操作数据库
- JDBC : Java获取数据库连接(Driver And DriverManager)
- java的Timer定时器中获取数据库连接报错
- JAVA连接数据库并获取数据的示例
- java通过JDBC_获取数据库连接
- java使用JNDI 获取weblogic配置的数据源 连接数据库
- java JDBC获取不同数据库连接操作
- javaweb获取数据库连接
- java获取数据库连接对象
- java中关于数据库连接的获取
- java 获取数据库连接
- java 获取图片属性、破损图片处理、写入日志、连接数据库
- java调用存储过程 从spring中获取数据库连接
- Java_最原始的获取数据库连接的两种方式
- java JDBC 通过物理连接数据库和通过获取数据库连接池进行链接