数据库基础概念

一、数据库

  数据库(Database)

    概念:按照数据结构来组织、存储和管理数据的仓库,统称数据库

    分类:关系型数据库、非关系型数据库

    关系型数据库:oracle,mysql,postgresql,DB2,SQL SERVER

    非关系型数据库:

  数据库管理系统(Database Management System)

    概念:一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。

 

二、数据库驱动

  JDBC(Java Data Base Connectivity)

    概念:一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

 

  驱动(Driver)

    概念:java应用程序要想访问数据库,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道,其实也就是数据库厂商的JDBC接口实现.

       例如 mysql的驱动jar包mysql-connector-java-XX.XX.XX  、  oracle的驱动jar包ojdbcXX.jar

 

  JDBC和驱动的关系 

    如下图:JDBC提供统一规范,不同的关系型数据库提供对应的JDBC驱动程序(JDBC API的实现

          

 

  实现步骤

    加载JDBC驱动程序 →建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源  

    • 导入相关数据库驱动的jar包文件 : mysql的驱动jar包mysql-connector-java-XX.XX.XX  、  oracle的驱动jar包ojdbcXX.jar
    • 装载驱动程序 :Class.forName("com.mysql.jdbc.Driver");
      //装载MySql驱动:
      Class.forName("com.mysql.jdbc.Driver");
      
      //装载Oracle驱动:
      Class.forName("oracle.jdbc.driver.OracleDriver");
    • 建立连接 :Connection con = DriverManager.getConnection(url, user, password);
      //连接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();
    • 关闭数据库,释放连接
      con.close();

             

三、数据源

  基本概念

    作用:所有的用户都需要经过此五步进行操作,但是这五步之中有三步(加载数据库驱动程序、连接数据库、关闭数据库,释放连接)对所有人都是一样的,而所有人只有在操作数据库上是不一样,那么这就造成了性能的损耗。

       那么最好的做法是,准备出一个空间,此空间里专门保存着全部的数据库连接,以后用户用数据库操作的时候不用再重新加载驱动、连接数据库之类的,而直接从此空间中取走连接,关闭的时候直接把连接放回到此空间之中。

       未使用数据源:每次连接都创建Connection 

          

       使用数据源

          

 

 

    原理:在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。

    通俗理解:数据库连接池就是准备一个池子,里面放着很多生成好的Connection,用户请求获得连接,就不需要getConnection,只要从池子里拿一个给他就行了,这样省掉了生成Connection的时间,效率上会有很大提高。

    常用数据源:

      DBCP 数据库连接池 (Tomcat内置)

      C3P0 数据库连接池(Spring内置)

 

  DBCP 讲解

 

  C3P0 讲解

 

四、JNDI的概念以及和JDBC区别

  JNDI(Java Naming and Directory Interface)

    概念:从Java应用程序中访问名称和目录服务的一组API,有利于编程人员使用同一种方式来访问命名和目录服务

    命名服务:命名服务在一个集中位置存储信息,这样用户、计算机和应用程序便可通过网络进行通信。命名服务使用名称查找对象,而不是对象的物理ID。

         比如说在tomcat中查找JDBC数据源不是通过数据源的直接引用查找,而是通过JNDI与数据源绑定的名称查找

     目录服务:目录服务是命名服务的扩展,目录服务的对象不单有名称,还有属性,既可以通过名称查找对象,也可以通过属性查找到一批对象然后筛选出自己需要的对象。

         目录服务应该比命名服务更广发,它可以将整个网络中的资源和设备组织起来,形成一个大的目录,然后通过目录就可以定位资源和设备,实现集中管理。

    服务结构:JNDI结构包括JNDI API和JNDI SPI

        开发者通过JNDI API以一致的方式来访问各种命名服务、目录服务,而JNDI API则保证各种命名服务、目录服务透明的加入JNDI结构中,Naming Manager则负责管理二者之间的转换。
        在开发企业级应用时,JNDI显得尤其重要:客户端代码可以通过JNDI来访问EJB,客户端代码需要通过JNDI来访问容器管理的数据源......Java EE应用中所有远程对象都需要通过JNDI来访问。

      

             

 

  JNDI与JDBC的区别  

    系统服务启动时,应该与数据库维持一定数量的连接,等待用户使用。
    如果连接已经满了,则必须打开新的连接,供更多用户使用。
    如果一个服务器就只能有100个连接,那么如果有第101个人过来呢?应该等待其他用户释放连接
    如果一个用户等待时间太长了,则应该告诉用户,操作是失败的。
    直接用程序实现以上功能,则会比较麻烦,所以在Tomcat 4.1.27之后,在服务器上就直接增加了数据源的配置选项, 直接在服务器上配置好数据源连接池即可。

    在J2EE服务器上保存着一个数据库的多个连接。每一个连接通过DataSource可以找到。DataSource被绑定在了JNDI树上(为每一个DataSource提供一个名字)客户端通过名称找到在JNDI树上绑定的DataSource,再由DataSource找到一个连接。

 

              

 

  JNDI使用

    JNDI数据源配置:

<!--配置Oracle数据库的JNDI数据源-->
<Resource
        name="jdbc/oracle"
        auth="Container"
        type="javax.sql.DataSource"
        maxActive="100"
        maxIdle="30"
        maxWait="10000"
        username="lead_oams"
        password="p"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        url="jdbc:oracle:thin:@192.168.1.229:1521:lead"/>
 
<!--配置MySQL数据库的JNDI数据源-->
<Resource
        name="jdbc/mysql"
        auth="Container"
        type="javax.sql.DataSource"
        maxActive="100"
        maxIdle="30"
        maxWait="10000"
        username="root"
        password="root"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://192.168.1.144:3306/leadtest?useUnicode=true&amp;characterEncoding=utf-8"/>

 

     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语句
// TODO
// 4.关闭连接,释放资源
conn.close();

 

posted on 2019-04-04 20:08  levi~liu  阅读(180)  评论(0)    收藏  举报

导航