`

四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0)

 
阅读更多

一、环境

   1、数据库驱动jar文件

   2、DBCP方法

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

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

资源文件

   3、c3p0方法:

c3p0-0.9.1.2.jar

配置文件:c3p0-config.xml

二、连接操作

   1.DriverManager方法;

     import java.sql.Connection;

 import java.sql.DriverManager;

 import java.sql.SQLException;

 public class DBConnection {

        private static String driverClass = "com.mysql.jdbc.Driver";

        private static String url = "jdbc:mysql://localhost:3306/test";

        private static String username = "root";

        private static String password = "123456";

        private static Connection conn = null;

        static{

            try {

                //注册驱动

                // 不要把conn = DriverManager.getConnection(url, username, password);

                 //放在这里。防止所有用户都用一个Connection

                  Class.forName(driverClass);  

                 } catch (Exception e) {

                          throw new RuntimeException(e);

                 }

       }

       public static Connection getConnection() throws SQLException{

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

            return conn;

      }

 

   }

2.使用DataSource子类方法;

资源文件DBConnection.properties

   driverClass = com.mysql.jdbc.Driver

   url = jdbc:mysql://localhost:3306/test

   username = root

   password = 123456

模拟数据连接池 DataSourcePool.java

       package cn.langzi.jdbc.DataSource;

       import java.io.InputStream;

       import java.io.PrintWriter;

       import java.lang.reflect.InvocationHandler;

       import java.lang.reflect.Method;

       import java.lang.reflect.Proxy;

       import java.sql.Connection;

       import java.sql.DriverManager;

       import java.sql.SQLException;

       import java.util.LinkedList;

       import java.util.Properties;

       import javax.sql.DataSource;

       import javax.sql.DataSource;

 

       public class DataSourcePool implements DataSource {

 

       private static String url = null;

       private static String username = null;

       private static String password = null;

       private static int size = 10;

       private static LinkedList<Connection> list = new LinkedList<Connection>();

       static{

          try {

               InputStream in = DataSourcePool.class.getClassLoader()

                             .getResourceAsStream(

                               "cn/langzi/jdbc/DataSource/DBConnection.properties");

               Properties prop = new Properties();

               prop.load(in);

               Class.forName(prop.getProperty("driverClass"));

               url = prop.getProperty("url");

               username = prop.getProperty("username");

               password = prop.getProperty("password");

 

              } catch (Exception e) {

                  throw new ExceptionInInitializerError(e);

              }

      }

      private static DataSourcePool pool = new DataSourcePool();

          //创建对象就初始化size个数据库连接

      private DataSourcePool(){

          for(int i=0;i<size;i++){

             try {

                    Connection conn = DriverManager.getConnection(url, username, password);

                    System.out.println(conn);

                    list.add(conn);

                 } catch (SQLException e) {

                         e.printStackTrace();

                 }

           }

     }

     public static DataSourcePool getInstance(){

            return pool;

      }

      @Override

      public Connection getConnection() throws SQLException {

      if(list.size()>0){

       //取到连接,即从list中弹出一个Connection 连接

           final Connection conn = list.pop();

       //动态代理,返回一个代理对象

        return (Connection) Proxy.newProxyInstance(DataSourcePool.class.getClassLoade(), conn.getClass().getInterfaces(), new InvocationHandler(){

       public Object invoke(Object proxy, Method method, Object[] args)

          throws Throwable {

           //如果Connection调用的是close方法就将连接返回给数据连接池

              if(method.getName().equals("close")){

                  list.push(conn);

                  return null;

               }

              return method.invoke(conn, args);

           }

 

           });

      }

        //连接用完

        throw new RuntimeException("对不起,服务器繁忙!!!");

    }

 

      @Override

      public Connection getConnection(String username, String password)

throws SQLException {

// TODO Auto-generated method stub

return null;

}

 

@Override

public PrintWriter getLogWriter() throws SQLException {

// TODO Auto-generated method stub

return null;

}

 

@Override

public int getLoginTimeout() throws SQLException {

// TODO Auto-generated method stub

return 0;

}

 

@Override

public void setLogWriter(PrintWriter out) throws SQLException {

// TODO Auto-generated method stub

 

}

 

@Override

public void setLoginTimeout(int seconds) throws SQLException {

// TODO Auto-generated method stub

 

}

 

@Override

public boolean isWrapperFor(Class<?> iface) throws SQLException {

// TODO Auto-generated method stub

return false;

}

 

@Override

public <T> T unwrap(Class<T> iface) throws SQLException {

// TODO Auto-generated method stub

return null;

}

}

 

package cn.langzi.jdbc.DataSource;

import java.sql.Connection;
    import java.sql.SQLException;

public class DBConnection {
   public static Connection getConnection() throws SQLException{
   
         Connection conn  = DataSourcePool.getInstance().getConnection();
         return conn;
 }
}

DBCP方法:

  资源文件:dbcpconfig.properties

    driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/test

username=root

password=123456

initialSize=10

maxActive=50

maxIdle=20

minIdle=5

maxWait=60000

连接数据库:

package cn.langzi.jdbc.DBCP;

 

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class DBConnection {

private static DataSource dataSource = null;

static {

try {

//获取资源文件

InputStream in = DBConnection.class.getClassLoader().getResourceAsStream("cn/langzi/jdbc/DBCP/dbcpconfig.properties");

Properties properties = new Properties();

//加载资源文件

properties.load(in);

//建立数据工厂

BasicDataSourceFactory dataSourceFactory =  new BasicDataSourceFactory();

dataSource = dataSourceFactory.createDataSource(properties);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 public static Connection getConnection() throws SQLException{

 return dataSource.getConnection();

 }

}

c3p0方法:

  配置文件:c3p0-config.xml

  <?xml version="1.0" encoding="UTF-8"?>

<c3p0-config>

<named-config name="userApp">

<property name="driverClass">com.mysql.jdbc.Driver</property>

<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>

<property name="user">root</property>

<property name="password">123456</property>

<property name="acquireIncrement">5</property>

<property name="initialPoolSize">10</property>

<property name="minPoolSize">10</property>

<property name="maxPoolSize">20</property><!-- intergalactoApp adopts a different approach to configuring statement caching -->

<property name="maxStatements">0</property>

<property name="maxStatementsPerConnection">5</property>

<!-- he's important, but there's only one of him -->

<user-overrides user="master-of-the-universe">

<property name="acquireIncrement">1</property>

<property name="initialPoolSize">1</property>

<property name="minPoolSize">1</property>

<property name="maxPoolSize">5</property>

<property name="maxStatementsPerConnection">50</property>

</user-overrides>

</named-config>

</c3p0-config>

连接数据库:

  package cn.langzi.jdbc.c3p0;

 

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

import javax.sql.DataSource;

 

import com.mchange.v2.c3p0.ComboPooledDataSource;

 

public class DbConnection {

private static DataSource dataSource;

static{

dataSource = new ComboPooledDataSource("userApp");

}

public static Connection getConnectioon() throws SQLException{

return dataSource.getConnection();

}

}

分享到:
评论

相关推荐

    java数据库连接DriverManager

    java数据库连接DriverManager

    神通数据库连接oscarJDBC.jar

    神通数据库oscarJDBC.jar数据库连接驱动,找了很久,javal连接方式 public static Connection con() throws Exception {  String DRVIER = "com.oscar.Driver";  String URL = "jdbc:oscar://IP:端口/数据库名称;...

    数据库的连接 数据库的连接

    通过本次试验,掌握了如何用JDBC去连接一个数据库,以及数据库的工作原理,还有连接过程中容易出现的异常,掌握了通过ODBC去连接JDBC方法和过程,怎样设置数据源,同时加深了对java程序面向对象编程的理解。

    Java连接数据库并修改内容.rar

    Java连接数据库并修改内容,Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动器  Connection con=DriverManager.getConnection(dbURL,user,password); //获取连接  String sqlStr="select * from ...

    JDBC连接数据库里面有各数据库的应用说明

    描述了在JAVA环境下各访问类的说明.DriverManager接口:该类是...当DriverManager激发getConnection()方法时,DriverManager首先从它已加载的驱动程序池中找到该数据库URL的驱动程序,连接到数据库,于是建立了连接。

    JAVA连接ORACLE数据库方法及测试

    /* 通过DriverManager的getConnection()方法获取数据库连接 */ conn = DriverManager.getConnection(url, user, password); } catch (Exception ex) { System.out.println("数据库连接出错"); } ...

    vertica数据库的连接jar包

    Java连接数据vertica数据库 就可以连接数据库 import java.sql.*; import java.util.Properties; Properties myProp = new Properties(); //用于设置数据库的用户名 myProp.put("user", "dbadmin"); //用于...

    jdbc连接数据库getConnection 增、删、改、查

    SqlHelper.java连接数据库通用类... package org.jdbc.com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql....

    jsp连接数据库代码

    jsp连接数据库代码 testmysql.jsp如下:  ;charset=gb2312"%&gt;  *"%&gt;  &lt;html&gt;  &lt;body&gt;  ("com.sybase.jdbc.SybDriver").newInstance();  String url =" jdbc:sybase:Tds:localhost:5007/tsdata";  //ts...

    java连接数据库工具类--DBConnection(java源码)

    * 获得与数据库的连接 * * @param path * @return Connection */ public static Connection getConn(String classDriver, String url, String user, String pwd) { try { Class.forName(class...

    c3p0-0.9.5.5.src.zip

    c3p0 是一个易于使用的库,用于使用 JNDI 可绑定数据源(包括实现连接和语句池的数据源)扩充传统(基于 DriverManager)的 JDBC 驱动程序,如 jdbc3 规范和 jdbc2 std 扩展所述。

    c3p0-0.9.5.4.bin.tgz

    c3p0 是一个易于使用的库,用于使用 JNDI 可绑定数据源(包括实现连接和语句池的数据源)扩充传统(基于 DriverManager)的 JDBC 驱动程序,如 jdbc3 规范和 jdbc2 std 扩展所述。

    c3p0-0.9.5.5.bin.zip

    c3p0 是一个易于使用的库,用于使用 JNDI 可绑定数据源(包括实现连接和语句池的数据源)扩充传统(基于 DriverManager)的 JDBC 驱动程序,如 jdbc3 规范和 jdbc2 std 扩展所述。

    jsp+jdbc实现连接数据库的方法

    本文实例讲述了jsp+jdbc实现连接数据库的方法。分享给大家供大家参考。具体如下: 初次尝试JSP+jdbc,按照书上的例子折腾了半天,就是连不上数据库。于是在网上找材料,终于发现,老的jar包与新版数据库直接不兼容。...

    Java连接数据库和断开数据库讲解 代码.rar

    Java连接数据库和断开数据库讲解 代码,研究JDBC连接SQLServer数据库,很简单但很实用的例子,从建立驱动连接到打开数据库的过程,欢迎学习参考。主要代码如下:  Class.forName(...

    Mysql,SQL Server 2000,Oracle四种数据库的连接

    Connection con=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=books","sa",""); Statement stmt=con.createStatement(); ResultSet rst=stmt.executeQuery(...

    Java使用JDBC连接数据库.docx

    o(2)通过DriverManager获取数据库连接 o(3)通过Connection对象获取Statement对象 o(4)使用Statement接口执行SQL语句 o(5)操作ResultSet结果集 o(6)关闭连接,释放资源 2.下面进行代码演示 1.注册数据库...

    Java 连接多种数据库代码参考

    Jdbc连接各种数据库代码方法大全 1、Oracle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为...

    数据库连接,里面有各种数据库的连接方法

    DBConnectionManager.java //连接数据库用的 import java.sql.*; public class DBConnectionManager { private String driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"; private String url="jdbc:...

    java数据库连接详细

    MySQL: ... //驱动程序 String URL="jdbc:mysql://localhost:3306/db_name"; //连接的URL,db_name为数据库名 String Username="username";... String Password="password";... //连接SQL数据库的方法

Global site tag (gtag.js) - Google Analytics