JavaWeb开发技术学习笔记(十二)——JNDI与JDBC连接池

JNDI:java命名与目录接口

pageContext < request< session< application(一个项目运行期间都有效)
String jndiName = “jndiValue” ;

abc 对象(资源…)
jndi:将某一个资源(对象),以配置文件(tomcat/conf/context.xml)的形式写入;

实现步骤:
tomcat/conf/context.xml配置:

<Environment  name="jndiName"  value="jndiValue" type="java.lang.String" />

jsp中用:

    <%
      Context ctx =  new InitialContext() ;
    String testJndi =  (String)ctx.lookup("java:comp/env/jndiName");

    out.print(testJndi);
    %>

连接池

常见连接池:Tomcat-dbcp、dbcp、c3p0、druid
可以用数据源(javax.sql.DataSource)管理连接池

Tomcat-dbcp

a.类似jndi,在context.xml中配置数据库

 <Resource name="student"
              auth="Container"
              type="javax.sql.DataSource"
              maxActive="400"
              maxIdle="20"
              maxWait="5000"
              username="root"
              password="19981015"
              driverClassName="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/testdata?  	 useSSL=false&amp;serverTimezone=UTC" />

b.在项目的web.xml中

    <resource-ref>
        <res-ref-name>student</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

c.使用数据源

​ 更改 连接对象Connection的获取方式 :
​ 传统Jdbc方式
connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);
​ 数据源方式:
Context ctx = new InitialContext() ;//context.xml
DataSource ds = (DataSource)ctx.lookup(“java:comp/env/student”) ;
connection = ds.getConnection();

tomcat-dbcp数据源总结:

a.配置数据源(context.xml)

b.指定数据源(web.xml)

c.用数据源 :通过数据库获取Connection

dbcp连接池

连接池:
怎么用?
不用连接池
Class.forName();
Connection connection = DriverManager.getConnection();//连接指向数据库

用连接池的核心:将连接的指向改了,现在指向的是数据源 而不是数据库。
…-> DataSource ds = …
Connection connection =ds.getConnection();//指向的是数据源的连接

数据库访问核心 -> pstmt/stmt ->connection ->1.直接数据库 2.数据源 ds.getConnection()

PreparedStatemnt pstmt = connection.preparedStatement();

commons-dbcp-1.4.jar、commons-pool.jar

dbcp获取ds: BasicDataSource、BasicDataSourceFactory

BasicDataSource方式(硬编码):DasicDataSource对象设置各种数据

BasicDataSourceFactory方式: 配置方式(.properties文件, 编写方式key=value)
dbcpconfig.properties
BasicDataSourceFactory.createDataSource(props )

通用:NoClassDefFoundError异常 说明少jar

DataSource 是所有sql数据源的上级类。BasicDataSource是dbcp类型的数据源,ComboPooledDataSource是c3p0类型的数据源;XxxDataSource…

在这里插入图片描述

c3p0连接池 :ComboPooledDataSource

两种方式
硬编码
配置文件
->合二为一 ,通过ComboPooledDataSource的构造方法参数区分:如果无参,硬编码;有参,配置文件

c3p0.jar c3p0-oracle-thin-extras.jar

a.无参,硬编码
ComboPooledDataSource c3p0 = new ComboPooledDataSource();
c3p0.set…();

b.有参,配置文件(c3p0-config.xml)

oralce修改密码:
管理员状态 sqlplus / as sysdba
alter user scott identified by tiger ;

所有连接池的思路:
a.硬编码,某个连接池数据源的 对象 ds = new XxxDataSource(); ds.setXxx(); return ds ;
b.配置文件, ds = new XxxDataSource();加载配置文件 ,return ds ;

F:\用户\MACROSS\大学\资料\WEB开发技术\Jαva Web2019新增\1.IDEA开发Web项目和数据源连接池\1.IDEA开发Web项目和数据源连接池

package com.yanqun.util;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.io.InputStream;
import java.util.Properties;

public class DataSourceUtil {


    //获取dbcp方式的ds对象
    public static DataSource getDataSourceWIthDBCP(){
        BasicDataSource dbcp = new BasicDataSource();
        dbcp.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        dbcp.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:ORCL");
        dbcp.setUsername("scott");
        dbcp.setPassword("tiger");
        dbcp.setInitialSize(20);
        dbcp.setMaxActive(10);
        return dbcp;
    }


    public static DataSource getDataSourceWIthDBCPByProperties() throws Exception{
        DataSource dbcp = null ;
        Properties props = new Properties();
        InputStream input = new DBCPDemo().getClass().getClassLoader().getResourceAsStream("dbcpconfig.properties");
        props.load(  input );

        //只需要记住以下一句
        dbcp = BasicDataSourceFactory.createDataSource(props ) ;
        return dbcp;
    }

    public static DataSource getDataSourceWithC3P0(){
        ComboPooledDataSource c3p0 = new ComboPooledDataSource();
        try {
            c3p0.setDriverClass("oracle.jdbc.driver.OracleDriver");
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        c3p0.setJdbcUrl("jdbc:oracle:thin:@127.0.0.1:1521:ORCL");
        c3p0.setUser("scott");
        c3p0.setPassword("tiger");

        return c3p0 ;
    }

    public static DataSource getDataSourceWithC3P0ByXml(){
        ComboPooledDataSource c3p0 = new ComboPooledDataSource("yanqun");
        return c3p0 ;
    }

}

dbcpconfig.properties

driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
username=scott
password=tiger
initialSize=10

c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <!-- 如果要研究某个xml中可以设置哪些属性。找相关类的 属性 或者setXxx()-->
        <property name="user">scott</property>
        <property name="password">tiger</property>
        <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
        <property name="jdbcUrl">jdbc:oracle:thin:@127.0.0.1:1521:ORCL</property>
        <property name="checkoutTimeout">30000</property>
    </default-config>


    <named-config name="yanqun">
        <property name="user">scott</property>
        <property name="password">tiger</property>
        <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
        <property name="jdbcUrl">jdbc:oracle:thin:@127.0.0.1:1521:ORCL</property>
        <property name="checkoutTimeout">20000</property>

    </named-config>





</c3p0-config>
="driverClass">oracle.jdbc.driver.OracleDriver</property>
        <property name="jdbcUrl">jdbc:oracle:thin:@127.0.0.1:1521:ORCL</property>
        <property name="checkoutTimeout">20000</property>

    </named-config>





</c3p0-config>

猜你喜欢

转载自blog.csdn.net/MACRosshaha/article/details/105871175
今日推荐