文档章节

JDBC学习笔记

tao975
 tao975
发布于 2015/04/22 10:20
字数 1339
阅读 14
收藏 0
点赞 0
评论 0

1. JDBC是什么?

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序
    简单地说,JDBC 可做三件事:与数据库建立连接、发送 SQL 语句并处理结果。

2. 为什么使用JDBC?

    1)通过使用JDBC,可以使用标准的SQL语句访问任何数据库。
    2)高级语言程序员不需要了解底层数据库驱动开发,降低程序员学习量。

3. JDBC使用

    1)JDBC操作数据库一般步骤:
            1> 注册驱动(Driver)
            2> 建立连接(Connection)
            3> 创建执行SQL的语句(Statement)
            4> 执行语句
            5> 处理执行结果(ResultSet)
            6> 释放资源(close)

    2)注册JDBC驱动
        有三种方式:
        1> Class.forName(“com.mysql.jdbc.Driver”);
             推荐这种方式,不会对具体的驱动类产生依赖。
        2> DriverManager.registerDriver(com.mysql.jdbc.Driver);
             会造成DriverManager(驱动管理器)中产生两个一样的驱动,并会对具体的驱动类产生依赖。
        3> System.setProperty(“jdbc.drivers”, “driver1:driver2”);
             虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。

    3)建立连接
        Connection conn = DriverManager.getConnection(url, user, password);

        url格式:JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin: @localhost :orcl","scott","tiger");
        默认情况下一个数据库的连接是自动提交模式的(auto-commit)

    4)创建执行SQL的语句(Statement、PreparedStatement、CallableStatement
        CallableStatement:调用存储过程({? = call 过程名[(?, ?, ...)]} )
        Statement和PreparedStatement的区别:
        1>  Statement是一个SQL执行器,可以用来执行一个静态的SQL语句。 PreparedStatement执行动态的SQL语句。
        2> 只执行一次的SQL语句选择Statement是最好的。PreparedStatement的第一次执行消耗是很高的,它的性能体现在后面的重复执行。
        3> Update大量的数据时, 使用PreparedStatement的批处理。PreparedStatement的AddBatch()方法一次性发送多个查询给数据库,减少网络传输

    5)处理执行结果(ResultSet)
        1> ResultSet表示一个查询结果集。
        2> ResultSet中行的第一列索引为1,而非0。
        3> JDBC1.0中,我们只能在ResultSet中向前移动;在JDBC2.0中,我们可以在ResultSet中向下(next)或向上(previous)移动,同样也可以移到特定的行(relative,absolute)
        4> 尽量不要使用getObject()方法,因为JDBC驱动必须对要取得的值的类型作额外的处理以映射为特定的对象,降低了性能。

    6)释放资源
        1> 释放资源的顺序是ResultSet, Statement,Connection;
        2> Connection的使用原则是尽量晚创建,尽量早的释放。

4. 数据库连接池

    1)概念
    数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。
    JDBC的API中没有提供连接池的方法。

    2)连接池的分配与释放
    对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连接是否有效的判断,如果可用就分配给用户,如不可用就把这个连接从空闲池删掉,重新检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数(maxConn,如果没有达到,就新建一个连接,如果已经达到,就等待一定的时间(timeout)。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果等待时间超过预定时间timeout,则返回空值(null)。
    系统可采取设置最小连接数(minConn)和最大连接数(maxConn)来控制连接池中的连接。最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很快,响应起来却慢。

    3)连接池的实现
        c3p0、dbcp、proxool








© 著作权归作者所有

共有 人打赏支持
tao975
粉丝 1
博文 10
码字总数 34471
作品 0
广州

暂无相关文章

MySQL 数据库设计总结

规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节...

OSC_cnhwTY ⋅ 54分钟前 ⋅ 0

多线程(四)

线程池和Exector框架 什么是线程池? 降低资源的消耗 提高响应速度,任务:T1创建线程时间,T2任务执行时间,T3线程销毁时间,线程池没有或者减少T1和T3 提高线程的可管理性。 线程池要做些什...

这很耳东先生 ⋅ 今天 ⋅ 0

使用SpringMVC的@Validated注解验证

1、SpringMVC验证@Validated的使用 第一步:编写国际化消息资源文件 编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制 [java] view plain copy edit.userna...

瑟青豆 ⋅ 今天 ⋅ 0

19.压缩工具gzip bzip2 xz

6月22日任务 6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具 6.1 压缩打包介绍: linux中常见的一些压缩文件 .zip .gz .bz2 .xz .tar .gz .tar .bz2 .tar.xz 建立一些文...

王鑫linux ⋅ 今天 ⋅ 0

6. Shell 函数 和 定向输出

Shell 常用函数 简洁:目前没怎么在Shell 脚本中使用过函数,哈哈,不过,以后可能会用。就像java8的函数式编程,以后获取会用吧,行吧,那咱们简单的看一下具体的使用 Shell函数格式 linux ...

AHUSKY ⋅ 今天 ⋅ 0

单片机软件定时器

之前写了一个软件定时器,发现不够优化,和友好,现在重写了 soft_timer.h #ifndef _SOFT_TIMER_H_#define _SOFT_TIMER_H_#include "sys.h"typedef void (*timer_callback_function)(vo...

猎人嘻嘻哈哈的 ⋅ 今天 ⋅ 0

好的资料搜说引擎

鸠摩搜书 简介:鸠摩搜书是一个电子书搜索引擎。它汇集了多个网盘和电子书平台的资源,真所谓大而全。而且它还支持筛选txt,pdf,mobi,epub、azw3格式文件。还显示来自不同网站的资源。对了,...

乔三爷 ⋅ 今天 ⋅ 0

Debian下安装PostgreSQL的表分区插件pg_pathman

先安装基础的编译环境 apt-get install build-essential libssl1.0-dev libkrb5-dev 将pg的bin目录加入环境变量,主要是要使用 pg_config export PATH=$PATH:/usr/lib/postgresql/10/bin 进......

玛雅牛 ⋅ 今天 ⋅ 0

inno安装

#define MyAppName "HoldChipEngin" #define MyAppVersion "1.0" #define MyAppPublisher "Hold Chip, Inc." #define MyAppURL "http://www.holdchip.com/" #define MyAppExeName "HoldChipE......

backtrackx ⋅ 今天 ⋅ 0

Linux(CentOS)下配置php运行环境及nginx解析php

【part1:搭建php环境】 1.选在自己需要安装的安装包版本,wget命令下载到服务器响应目录 http://php.net/releases/ 2.解压安装包 tar zxf php-x.x.x 3.cd到解压目录执行如下操作 cd ../php-...

硅谷课堂 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部