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

举报
小哈里 发表于 2022/05/27 00:42:23 2022/05/27
【摘要】 文章目录 1、使用JDBC连接数据库2、使用JNDI连接数据库3、使用DBCP连接数据库4、JDBC、JNDI、DBCP的区别 1、使用JDBC连接数据库 Java使用Intel...

1、使用JDBC连接数据库

  • Java使用IntelliJ IDEA创建控制台程序并通过JDBC连接到数据库
    https://gwj1314.blog.csdn.net/article/details/122945623

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>
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 在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&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"url = "jdbc:mysql://localhost:3306/djn?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"
    	/>
    	
    </Context> 
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 在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>
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 在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();
    }
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 参考资料:
    https://blog.csdn.net/xiao__jia__jia/article/details/83781066
    https://blog.csdn.net/aitangyong/article/details/50904700
    https://blog.csdn.net/yan3013216087/article/details/80755476
    https://cloud.tencent.com/developer/article/1455718
    https://www.cnblogs.com/lsdb/p/7151779.html

  • 其他错误
    Tomcat8.5与9.0和8.0不兼容
    IDEA需要在工件里导入版本足够的jdbc包
    在这里插入图片描述

3、使用DBCP连接数据库

  • 参考资料:
    DBCP数据库连接池的简单使用
    https://www.cnblogs.com/sunseine/p/5947448.html
    https://www.cnblogs.com/zhangyinhua/p/7765626.html

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文件而不需要去修改代码。
    在这里插入图片描述

文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。

原文链接:gwj1314.blog.csdn.net/article/details/124975718

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。