0
点赞
收藏
分享

微信扫一扫

Java中JDBC、JNDI、DBCP的区别和联系


文章目录

  • 1、使用JDBC连接数据库
  • 2、使用JNDI连接数据库
  • 3、使用DBCP连接数据库
  • 4、JDBC、JNDI、DBCP的区别

1、使用JDBC连接数据库

  • Java使用IntelliJ IDEA创建控制台程序并通过JDBC连接到数据库

2、使用JNDI连接数据库

  • 在Web.xml中建立对数据源的引用

<?xml version="1.0" encoding="UTF-8"?>
 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 
	<resource-ref> 
        <description>DB Connection</description> 
        <res-ref-name>jdbc/mysql</res-ref-name> 
        <res-type>javax.sql.DataSource</res-type> 
        <res-auth>Container</res-auth> 
    </resource-ref> 
	 
</web-app>

  • 在META-INF下建立context.xml

<?xml version="1.0" encoding="UTF-8"?>  
<Context>  
	<Resource 
	name="jdbc/djn"
	auth="Container" 
	type="javax.sql.DataSource"
	initialSize="5"
	maxActive="5" 
	maxIdle="5"
	username="root" 
	password="root"
	driverClassName="com.mysql.cj.jdbc.Driver"
	url = "jdbc:mysql://localhost:3306/djn?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"url = "jdbc:mysql://localhost:3306/djn?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"
	/>
	
</Context>

  • 在jsp代码里验证是否连接成功

<%@ page language="java"  pageEncoding="UTF-8"%>
<%@page contentType="text/html; charset=UTF-8"%>
<%@page import="java.sql.*" %>
<%@page import="javax.naming.*" %>
<%@page import="javax.sql.DataSource" %>
<%@page import="com.hstc.db.DbFactory" %>
<head>
    <title>Tomcat8.5 JNDI!</title>
</head>
 
<body>
This is my JSP page. <br>
JNDI ... <br>
<%
    try {
        DbFactory.getConnection();
        out.println("连接成功...");
    } catch (Exception e) {
        e.printStackTrace();
    }
%>
</body>
</html>

  • 在java文件中连接JNDI

try{
    Context context = new InitialContext();
    if (context == null){
        System.out.println("oh bad");
    }
    DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/djn");
    con= ds.getConnection();
    String insertCondition="INSERT INTO user VALUES (?,?,?,?)";
    sql=con.prepareStatement(insertCondition);
    if(boo){
        sql.setString(1,logname);
        password = Encrypt.encrypt(password,"javajsp");
        sql.setString(2,password);
        sql.setString(3,phone);
        sql.setString(4,address);
        System.out.println(sql);
        int m=sql.executeUpdate();
        if(m!=0){
            backNews="注册成功";
            userBean.setBackNews(backNews);
            userBean.setLogname(logname);
            userBean.setPhone(phone);
            userBean.setAddress(address);
        }

    }
    else {
        backNews="信息填写不完整或名字中有非法字符";
        System.out.println("信息填写不完整");
        userBean.setBackNews(backNews);
    }
    System.out.println("closing con");
    con.close();
}catch(SQLException exp){
    backNews="该会员名已被使用"+exp;
    System.out.println("会员名");
    userBean.setBackNews(backNews);
    exp.printStackTrace();
}

  • 其他错误
    Tomcat8.5与9.0和8.0不兼容
    IDEA需要在工件里导入版本足够的jdbc包
  • Java中JDBC、JNDI、DBCP的区别和联系_intellij-idea

3、使用DBCP连接数据库

  • 参考资料:
    DBCP数据库连接池的简单使用

4、JDBC、JNDI、DBCP的区别

  • JDBC是通过java程序主动去连接数据库获得连接,而JNDI是通过请求命名服务器返回数据库连接。 功能范围不一样。 JDBC只能用来做一件事那就是连接数据库,而命名JNDI除了能和JDBC做同样的事以外还能管理当前应用服务器上的其他资源,如网页,文件等。
  • JDBC:Java DataBase Connectivity,Java连接数据库和执行SQL语句的API。
  • JNDI:Java Naming and Directory Interface,Java命名和目录接口。JNDI是指使用数据源连接数据库的这种方式,简单地,可以将JNDI理解为所有Data Source的集合。
  • DBCP:DataBase Connection Pool,数据库连接池。数据连接池就是连接数据库的进程的集合。一般的SQL 执行都是“建立数据库连接–执行SQL–关闭数据库连接”,对于频繁连接数据库应用,这样反复“建立连接–关闭连接”是非常耗系统资源的。
  • Data Source:数据源。就是将IP、数据库、用户名、密码封装起来对外只提供一个JNDI名称,在应用中只要调用这个JNDI就能连接数据库,而不需要在代码中写入用户名密码等信息。这样做的好处是,当用户名密码乃至数据库变化时只需要去修改JNDI的xml文件而不需要去修改代码。
  • Java中JDBC、JNDI、DBCP的区别和联系_数据库_02


举报

相关推荐

0 条评论