Java中JDBC、JNDI、DBCP的区别和联系
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&characterEncoding=UTF-8&serverTimezone=UTC"url = "jdbc:mysql://localhost:3306/djn?useUnicode=true&characterEncoding=UTF-8&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
- 点赞
- 收藏
- 关注作者
评论(0)