上一篇博客简单介绍了JDBC连接的简单知识,下面就详细介绍。李勇老师对JDBC连接有很好的比喻:

首先加载驱动,其实就是一些类,就是jar包,要加载到classpath里面的。实际的程序,服务和数据库不是在同一台机器上的。首先要建立一个网络连接,有这个连接之后就可以通过java语言来访问数据库。比如两个城市之间运送货物,但是有个河,所以要建一座桥,这就是建立连接,而汽车运送货物,汽车就是Statement。而查询语句就是货物,这些货物发送之后获得的数据就是ResultSet。一次发送之后就要把数据清空,汽车销毁,桥也拆掉。

注册驱动。

         你可以使用下面的六种方法注册,但是一般不常见,其中第一种使用方式最多。

1,DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

这是注册驱动的代码:

其中上面的图片的倒数第三行有个drivers,其定义如下,说明是个列表,可以把多个驱动放进去。

当把驱动加载进去之后,你调用DriverManager.getConnection(xxx)之后,会在驱动列表根据URL挨个找驱动,看哪个驱动可以连接上数据库。如果所有驱动都不能建立连接则报错。

2, System.setProperty("jdbc.driver", "oracle.jdbc.driver.OracleDriver");

这种方法也可以使得虚拟机加载驱动。并且可以一次加载多个,例如:

System.setProperty("jdbc.driver", "oracle.jdbc.driver.OracleDriver:com.mysql.jdbc.Driver");

  3,Class.forName("oracle.jdbc.driver.OracleDriver");

这种是最常用的方法,他只是把类装载到虚拟机里面,但是没有构造实例了。一般都是把驱动放到驱动列表里面,但是这里面是怎么实现的呢?当一个类被加载到虚拟机之后呢,就要调用的该类的静态代码块,这是类的初始化的内容。那么看看实现该接口的JDBC驱动里面代码是怎么样的(这里是mysql的):可以看出,当类被加载到虚拟机的时候就会执行静态代码块的内容了。

上面三种方法哪种最好呢?当然是第三种,因为:

第一、二种相当于注册两次,第三种只注册一次。

第一种依赖数据库驱动,如果没有驱动,当然不能通过编译。第二种即使没有驱动,都可以通过编译。

因此建议使用第三种方式。

二 建立连接

一般的连接建立如下:

这里主要讲一下URL是什么。

String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user ="scott";//用户权限
String password = "scott";
Connection conn = DriverManager.getConnection(url, user, password);

jdbc是个协议,上面的url最后面orcl是数据库实例。每个数据库的url格式都不同 ,下面是总结了大部分的数据库的URL格式:

三 其他

当建立连接之后,用户就可以访问数据库了,相当于桥建好了。但是怎么访问了,当然是使用查询等sql语句,但是这些语句该怎么传送给数据库呢,当然要使用车来运输了,这个车就是要创建Statement对象,它可以传送要发送的sql语句,也会传送查询等的结果。但是有个问题是在数据执行所得到的结果放在哪里呢?一直放在车上?不会的,他会给ResultSet对象,这个对象是个二维表的结构,然后用户可以使用ResultSet对象里面查到的值做一系列操作了。当然最后要释放资源了,释放的顺序也很重要,先创建的后释放。为什么要释放资源呢?因为一个数据库有很多应用来操作,用了数据库之后要及时关闭,不然当超过一定值得时候会导致系统负载很大,导致宕机。

         // 3,创建语句
Statement stmt = conn.createStatement();
// 4,执行语句,返回结果集
ResultSet rs = stmt.executeQuery(sql);
// 5,处理结果
while (rs.next()) { }
// 6,关闭连接
rs.close();
stmt.close();
conn.close();
这些代码是个简单的演示,只是为了熟悉过程。本文来自《JDBC Recipes A Problem-Solution Approach》和传智播客的李勇老师的视频

JDBC学习笔记(2)的更多相关文章

  1. JDBC 学习笔记(十一)—— JDBC 的事务支持

    1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...

  2. JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架

    1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...

  3. JDBC 学习笔记(六)—— PreparedStatement

    1. 引入 PreparedStatement PreparedStatement 通过 Connection.createPreparedStatement(String sql) 方法创建,主要用 ...

  4. JDBC学习笔记二

    JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...

  5. JDBC学习笔记一

    JDBC学习笔记一 JDBC全称 Java Database Connectivity,即数据库连接,它是一种可以执行SQL语句的Java API. ODBC全称 Open Database Conn ...

  6. JDBC学习笔记(2)——Statement和ResultSet

    Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement ...

  7. JDBC学习笔记(1)——JDBC概述

    JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数 ...

  8. 【转】JDBC学习笔记(2)——Statement和ResultSet

    转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数 ...

  9. 【转】JDBC学习笔记(1)——JDBC概述

    转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...

  10. JDBC学习笔记(1)

    说明:本系列学习笔记主要是学习传智播客的李勇老师的教学课程和一本英文电子书<JDBC Recipes A Problem-Solution Approach>所作的笔记. 1,什么是JDB ...

随机推荐

  1. WPF开发经验

    UpdateSourceTrigger 0.在一个项目中在用到绑定的时候一直有一个问题,虽然设置了Mode=TwoWay,界面的值修改了,但是后天绑定的值没有变化.最终发现了问题,在于UpdateSo ...

  2. VIM操作常用指令(转)

    vim是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.vi是"visual interface&q ...

  3. Android背景渐变色(shape,gradient)

    Android设置背景色可以通过在res/drawable里定义一个xml,如下: <?xml version="1.0" encoding="utf-8" ...

  4. mac--又发现了一款mac快捷键神器

    之前用applescript,还有keyboard maestro,前段时间用机械键盘的时候,用开源的karabiner重新设置机械键盘的键位. 今天因为网上抄的键位F4想换成Launchpad,所以 ...

  5. 被忽略的js细节

    今天在写一个程序,出了一点小bug,找了许久许久,终于把问题给揪了出来,真相大白那一刻感觉好蛋疼--深刻体会到了语言之间的差异. <script type="text/javascri ...

  6. 给div设置background-color: rgba(0, 0, 0, 0.2)属性,并加了css3动画--opacity动画淡出动画,之后div子元素的字体会抖一下

    问题:给div设置background-color: rgba(0, 0, 0, 0.2)属性,并加了css3动画--opacity动画淡出动画,之后div子元素的字体会抖一下: 解决:animati ...

  7. windows无法停用“Android Composite Interface”设备的解决方法

    遇到这个问题时,解决方法如下: 打开设备管理器 -> 进程 -> 找到 adb.exe -> 右击选择结束进程 -> 然后重新弹出Android设备

  8. genymotion不能联网

    1.打开Oracle VM Virtual Box,选中相应的虚拟机,点击上侧工具栏中的『设置』: 2.选择『网络』,接着将: 网卡1的连接方式设置为仅主机(Host-Only)适配器: 将网卡2设置 ...

  9. JAVA中获得一个月最大天数的方法(备忘)

    Calendar 类是一个抽象类,为日历字段之间的转换提供了一些方法.其中有一个重要方法 getActualMaximum ,该方法用于返回指定日历字段实际的最大值. 利用这个方法(Calendar. ...

  10. java 汉语转拼音(全拼,首字母)

    import java.util.*; import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.for ...