数据库、数据源、数据库连接池、JDBC,JNDI等知识点整理
很多java软件开发者初学者,在学习数据库与java应用程序时,难免会遇到一些困扰,现在根据自己的学习和应用,为大家简单整理了一些资料,希望能帮助到大家,不足之处还望指正。
本文章为大家介绍一下相关概念及应用联系。关于JDBC、数据库连接池、JNDI等知识的详细配置和使用,会在接下来的博客中为大家具体介绍
简单介绍一下数据库概念
1.数据库(Database)
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,当前使用最多的是关系型数据库,常见数据库软件包括:oracle,mysql,postgresql,DB2,SQL SERVER....
2.数据库管理系统(Database Management System)
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库.
认识数据库之后,马上在java的应用程序中使用JDBC调用数据库吧
3.java数据库连接(Java Data Base Connectivity,即JDBC)
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
加载JDBC驱动程序 →建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源
①导入相关数据库驱动的jar包文件
我们的java应用程序要想访问数据库,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。
mysql的驱动jar包mysql-connector-java-XX.XX.XX:下载地址https://dev.mysql.com/downloads/connector/j/
oracle的驱动jar包ojdbcXX.jar:http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
②装载驱动程序
加载 Driver 类后,它们即可用来与数据库建立连接。
调用 Class.forName 将自动加载驱动程序类,只需要非常简单的一行代码。
Class.forName("XXX.XXX.XXX");
Driver接口由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。如:
装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");
装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");
③建立连接
Connection con = DriverManager.getConnection(url, user, password);
Connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果。
连接MySql数据库:Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");
连接Oracle数据库:Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");
连接SqlServer数据库:Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database", "user", "password");
④操作数据库(PreparedStatement stat = con.prepareStatement(sql);stat.executeQuery();)
(关于JDBC详细使用可以访问
http://www.cnblogs.com/erbing/p/5805727.html)
所以在实际应用开发中,数据源和数据库连接池的应用就显得尤为重要。
4.数据源(DataSource)
Java中的数据源就是javax.sql.DataSource。DataSource的创建可以有不同的实现。DataSource 通常被称为数据源,它包含连接池和连接池管理两个部分,习惯上也经常把 DataSource 称为连接池。(copy from 《数据源和数据库连接池》)
每一个数据库实例里面包含多张table,多个存储过程,多个索引,多个约束等,而每个表里面都有很多字段列。数据源所依附的对象是数据库软件(oracle,mysql...),只要安装有这个软件就有数据源,不管你有没有创建自己的数据库实例,数据源都是存在的而且一般一个数据库软件都会只有一个数据源。数据源包含两个部分:连接池和连接管理。
5.数据库连接池
连接池基本的思想,原理:
在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
连接池通俗理解:
数据库连接池就是准备一个池子,里面放着很多生成好的Connection,用户请求获得连接,就不需要getConnection,只要从池子里拿一个给他就行了,这样省掉了生成Connection的时间,效率上会有很大提高。
①应用程序直接获取连接的缺点(图解)
②使用数据库连接池优化程序性能(图解)
开源数据库连接池介绍
现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSource的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。
也有一些开源组织提供了数据源的独立实现:
DBCP 数据库连接池 (Tomcat内置)
C3P0 数据库连接池(Spring内置)
简而言之,使用开源数据源,就是为了获取其DataSource对象,然后通过该对象动态的地获取数据库连接。
很多初学者认为从项目的TOMCAT配置文件中发现类似数据库连接池的配置,认为JNDI也是数据库连接池的一种,这种理解明显是错误的,JNDI和JDBC、数据库连接池是不同的概念,下面简单介绍一下JNDI,关于JNDI在java应用程序的详细使用以及配置,接下来的博客中都会给大家介绍
6.JNDI
命名或目录服务允许您集中管理共享信息的存储,这在网络应用程序中很重要,因为它可以使这类应用程序更加一致和易于管理。例如,可以将打印机配置存储在目录服务中,这样所有与打印机相关的应用程序都能够使用它。
-----来自java.sun.com:
使用JNDI配置数据源 转自http://www.cnblogs.com/lyy-2016/p/5742958.html
JNDI数据源配置:
备注:TOMCAT默认使用的是DBCP数据库连接池,所以上述通过JNDI获取数据源其实是TOMCAT默认使用的DBCP数据源。
java应用程序中调用如下:
// java:comp/env/为固定值,不可变更
String gENV = "java:comp/env/";
// 上下文实例
Context ctx = new InitialContext();
// 1.获取数据源(gENV+配置中name属性值)
DataSource ds = (DataSource)ctx.lookup(gENV+"jdbc/oracle");
// 2. 获取连接
Connection conn = ds.getConnection();
// 3.执行SQL语句
.....
// 4.关闭连接,释放资源
conn.close();
好了,先介绍到这里,详细使用后续介绍..............
参照文章:http://www.cnblogs.com/lyy-2016/p/5742958.html
http://www.cnblogs.com/erbing/p/5805727.html