一、JDBC是什么?

JDBC:Java Database Connectivity(Java数据库连接池)。指定了统一的访问各种关系型数据库的标准接口-----桥梁作用。

   功能:【与数据库建立连接】【向数据库发送SQL请求】【处理从数据库返回的结果】

 步骤如下:A. 加载并注册数据库驱动----【数据库不同驱动链接不同】

              Class.forName("com.mysql.cj.jdbc.Driver"); 
                                 B. 通过DriverManager获取数据库连接
          Connection conn=DriverManager.getConnection(String url,String username,String password);
                                 C. 通过Connection对象获取Statement对象
          stat=conn.createStatement();
                                      D. 使用Statement执行SQL语句         
          int num1=sta.executeUpdate(sql);  或者  res = stat.executeQuery(sql);
                                 E. 操作ResultSet结果集
                ResultSet.next()
                用JavaBean封装查询出来的数据对象
                                 F. 关闭连接,释放资源
                        stat.close();//这里并非最好的关闭方式
res.close();
conn.close();

       关闭流的顺序---推荐反着来----先关ResultSet---Statement----Connection---推荐显式关闭---并关闭前判断是否为空

       原因是:关闭Conneciton,且Statement若不手动关闭,将由GC机制自动关闭,且再关闭前Statement对象和ResultSet对象将被占用。

          若在自动关闭前-----数据库连接池的连接数量达到最大允许值--此时将会抛异常。

        Driver接口:JDBC程序必须实现的接口,专门提供给提供数据库厂商使用。
       DriverManager类:管理数据库中所有的驱动程序,用于加载JDBC驱动,在数据库的驱动程序之间建立连接。
       Connection接口:代表与特定的数据库的连接,只有获得其连接对象才能访问数据库,在上下文中执行SQL语句的返回结果。
      Statement接口:用于执行静态的SQL语句,并返回一个结果对象。
          execute():可以执行任何SQL语句。
          executeUpdate()执行增删改语句,返回一个int的值,即影响的行数。    
          executeQuery()执行查询语句,返回一个查询结果的ResultSet对象

         PreparedStatement接口:是Statement的子接口,执行预编译的SQL语句。
            用占位符“?”来代替其他参数,再通过SetXxx()方法赋值。预编译SQL语句。
       ResultSet接口:类似一个临时表,用来暂时存放数据库查询操作所返回的结果集,封装在一个逻辑表格中。
          该接口中存有一个指向表格数据行的游标(或指针),调用next()方法游标移动下一行,若无数据,返回false。
             定义getXxx()方法既可以通过字段的元素指引获取数据,也可以通过字段的名称来获取指定元素。
        

注意:mysql8.0以上版本-----url中要加入时区信息:serverTimezone=UTC。
          且Mysql的驱动链接有改变:com.mysql.cj.jdbc.Driver
          使用JavaBean文件的setXxx方法要与数据库的字段名相同。

  二、如何更好的优化JDBC? 
     当用户量过多时,每次都需要创建Connection对象,这是件很消耗性能的事情。因此,诞生了数据库连接池
    
  数据库连接池:负责分配、管理、释放数据库连接,允许应用程序重复使用现有的数据库来接。
      数据源:实现了Javax.sql.DataSource接口的类称为数据源,即数据源中存储了所有建立数据库连接的信息,即数据来源。
      DataSource接口:为获取数据库连接对象(Connection),负责与数据库建立连接,并定义返回值为Connection对象的方法。

  
DBCP数据源:数据库连接池(DataBase Connection Pool)的简称,apache组织下的开源连接池的实现。
   BasicDataSource:是DataSource接口的实现类,主要包括设置数据源对象的方法。a.需要手动给数据源对象设置属性值,然后获取数据库连接对象。
     BasicDataSourceFactory:是创建BasicDataSource对象的工厂类,
      它包含一个返回值为BasicDataSource对象的方法createDataSource()方法。
      该方法通过读取配置文件的信息生成数据源对象并返回给调用者。
dpcpconfig.properties       #连接设置
                    driverClassName=com.mysql.cj.jdbc.Driver
                    url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
                    username=root
                    password=
                    #初始化连接
                    initialSize=
                    #最大连接数量
                    maxAcitve=
                    #最大空闲连接
                    maxIdle=10
通过配置文件读取数据源得到连接
public static DataSource ds=null;

  static {

  Properties prop=new Properties();//新建配置文件对象
  InputStream in = new Dbcp2().getClass(). //通过类加载器找到文件路劲,读配置文件
  getClassLoader().getResourceAsStream("dbcpconfig.properties");
  prop.load(in);//以输入流的形式加载到配置对象中
  ds=BasicDataSourceFactory.createDataSource(prop);}//创建数据源
 

 
 
 C3P0数据源:实现了DataSource数据源接口,开源框架Hibernate和Spring都支持该数据源。
      ComboPooledDataSource:是DataSource接口的实现类,创建数据源对象
           a.使用ComboPooledDataSource()构造方法创建数据源对象,需要手动给数据源对象设置属性值,然后获取数据库连接对象。
           b.使用ComboPooledDataSource(String configName)构造方法读取c3p0.xml配置文件,从而创建数据源对象,再获取数据库连接对象。
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">
jdbc:mysql://localhost:3306/demo?useUnicode=true&amp; characterEncoding=UTF-8&amp; useSSL=false&amp; serverTimezone=GMT%2B8
</property>
<property name="user">root</property>
<property name="password"></property>
<property name="checkoutTimeout"></property>
<property name="initialPoolSize"></property>
<property name="maxIdleTime"></property>
<property name="maxPoolSize"></property>
<property name="minPoolSize"></property>
<property name="maxStatements"></property>
</default-config>
<named-config name="itcast">
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">
jdbc:mysql://localhost:3306/demo?useUnicode=true&amp; characterEncoding=UTF-8&amp; useSSL=false&amp; serverTimezone=GMT%2B8
</property>
<property name="user">root</property>
<property name="password"></property>
<property name="initialPoolSize"></property>
<property name="maxPoolSize"></property>
</named-config>
</c3p0-config> 通过配置数据源得到数据库连接连接池连接
public static DataSource ds = null; static {
  
  ComboPooledDataSource cpds=new ComboPooledDataSource("itcast");

   ds=cpds;
     }

  注:配置文件名必须为c3p0-config.xml或者c3p0.properties,并且位于该项目的scr根目录下。
             当传入的configName值为空或者不存在时,则使用默认的配置方式创建数据源。
 
还有阿里巴巴提供的数据源----druid
  
 
关于 druid的详细用法和图片来源---木霖森77
 


DBUtils工具:Apache提供的第三方工具,实现了对JDBC的封装。----对于操作的可观性,提供了很大的便利。
  QueryRunner类:简化了执行SQL语句的代码,与ResultSetHandler组合在一起能完成大部分数据库操作。
   常见方法:
    query(String sql,ResultSetHandler rsh,Object...params):执行查询操作,能从提供给构造方法的数据源或使用SetDataSource()方法中获得连接。
    update(String sql,Object...params)方法:执行插入、更新、或删除操作,params可置换多个参数。
  ResultSetHandler接口: 处理ResultSet结果集,可以将结果集中的数据转为不同的形式。
    BeanHandler和BeanListHandler实现类:将结果集中的数据封装到对应的JavaBean实例中。
    ScalarHandler:输出结果集中一行数据的指定字符段值。
    MapHandler:把一行结果转为Map对象。
QueryRunner qr=new QueryRunner(DButils.getDataSource());//得到数据源(得到连接)并创建执行器对象
List  list=(List)qr.query(sql, new BeanListHandler<User>(User.class));
 注意:数据库连接池只是代为管理Connection---意思是:数据库连接的连接数有限,咱若不关闭,它过段时间见帮咱关闭。
  这里的关闭,是指把Connection重新放回带连接池,等待下一次取用。当访问量过多,会出现如下情况:
    数据库连接连接池的连接数达到上限,无连接可用,持续等待中----有可能抛异常。
 
问题来了:既然Java代码可以编写JDBC程序,那么为什么还普遍会用配置文件XML或properties???
   .............好像是框架采用配置文件加载JDBC,便于更改数据库,但是Java程序更改数据库也不过是换参数
 
 
那么-----读取配置文件有那几种方式呢?
       老哥这个笔记写超棒,但找不到链接---就直接把网址复制过来了。
 
 
@看了下别人写的随笔和自己写的随笔,觉得好差劲--突然在想写笔记的目的无非是我们对知识点的感悟和总结,而每次排版的逻辑和内容梳理也很重要,所以我尽量改进。
  
 
  

数据库---JDBC的解析的更多相关文章

  1. java连接mysql数据库详细步骤解析

    java连接mysql数据库详细步骤解析      第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar      第二步:导入下载的J ...

  2. 数据库——JDBC

    数据库--JDBC 数据库优点:降低存储数据的冗余度: 更高的数据一致性: 存储的数据可以共享: 可以建立数据库所遵循的标准: 便于维护数据完整性: 能够实现数据的安全性: 建立数据库: 数据库的存储 ...

  3. 常用数据库 JDBC URL 格式

    一 常用数据库 JDBC URL 格式 1 sqLite  驱动程序包名:sqlitejdbc-v056.jar 驱动程序类名: org.sqlite.JDBC JDBC URL: jdbc:sqli ...

  4. Oracle数据库字符集问题解析

    Oracle数据库字符集问题解析 经常看到一些朋友问ORACLE字符集方面的问题,我想以迭代的方式来介绍一下.第一次迭代:掌握字符集方面的基本概念.有些朋友可能会认为这是多此一举,但实际上正是由于对相 ...

  5. BMP是在Bean中完成对数据库JDBC的各种调用

    BMP是在Bean中完成对数据库JDBC的各种调用 CMP是由EJB容器自动完成对数据库的操作 会话Bean主要处理业务逻辑

  6. Java应用程序连接数据库--JDBC基础

    Java应用程序连接数据库--JDBC基础   Java应用程序连接数据库–JDBC基础 <!-- MySQL驱动,连接数据库用,由数据库厂商提供 --> <dependency&g ...

  7. canal 基于Mysql数据库增量日志解析

    canal 基于Mysql数据库增量日志解析  1.前言  最近太多事情 工作的事情,以及终身大事等等 耽误更新,由于最近做项目需要同步监听 未来电视 mysql的变更了解到公司会用canal做增量监 ...

  8. 牛客网数据库SQL实战解析(51-61题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  9. 牛客网数据库SQL实战解析(41-50题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

随机推荐

  1. Gym - 102021E

    Gym - 102021Ehttps://vjudge.net/problem/2109787/origin主要是一个处理精度的技巧,避免精度误差可以加eps,然后乘1e(小数点之后的位数). #in ...

  2. mysqlbinlog: unknown variable 'default-character-set=utf8'

    [xxx@dbhost log]$ mysqlbinlog mysql-bin. mysqlbinlog: unknown variable 'default-character-set=utf8' ...

  3. Odoo加载机制指导流程

    Odoo的启动通过openerp-server脚本完成,它是系统的入口. 然后加载配置文件openerp-server.conf 或者 openerp_serverrc: openerp-server ...

  4. 使用 top instance 命令查看运行中 MaxCompute 作业

    我们都知道,在 MaxCompute Console 里,可以使用下面的命令来列出运行完成的 instance 列表. show p|proc|processlist [from <yyyy-M ...

  5. [bzoj2654] tree 最小生成树kruskal+二分

    题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树.题目保证有解. 输入格式 第一行V,E,need分别表示点数,边数和需要的白色边数.接下来E行, ...

  6. js的简单介绍和相关的必备常识

    一.概念 1.js是JavaScript的缩写,是运行在浏览器端或服务端的依附于页面的脚本语言. 2.js的学习分为:ECMA语法.Dom网页对象模型.Bom浏览器的对象模型 3.ECMA是浏览器厂商 ...

  7. php四种文件加载语句

    https://mp.weixin.qq.com/s/Wsn4grDRxVIgMfu__E_oWQ 1.include 2.require 3.include_once 4.require_once ...

  8. gin框架中间件

    1. Gin框架中间件Gin框架中间件A. Gin框架允许在请求处理过程中,加入用户自己的钩子函数.这个钩子函数就叫中间件B. 因此,可以使用中间件处理一些公共业务逻辑,比如耗时统计,日志打印,登陆校 ...

  9. pycharm 安装与激活

    ---恢复内容开始--- 环境:Windows 专业版 1.下载安装 1.到官网下载专业版(专业版功能更全(但要激活码),社区版免费) 2.下载完后双击.exe 文件进行安装 NEXT 下一步 NEX ...

  10. MyBatis-Spring(三)--Mapped Statements collection does not contain value for...问题解决

    前一篇文章我总结了一下MyBatis-Spring项目使用SqlSessionTemplate配置的用法,其实在测试过程中并不是一帆风顺,遇到了很多的问题,最主要的就是Mapped Statement ...