JDBC学习笔记(2)
上一篇博客简单介绍了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学习笔记(2)的更多相关文章
- JDBC 学习笔记(十一)—— JDBC 的事务支持
1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...
- JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架
1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...
- JDBC 学习笔记(六)—— PreparedStatement
1. 引入 PreparedStatement PreparedStatement 通过 Connection.createPreparedStatement(String sql) 方法创建,主要用 ...
- JDBC学习笔记二
JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...
- JDBC学习笔记一
JDBC学习笔记一 JDBC全称 Java Database Connectivity,即数据库连接,它是一种可以执行SQL语句的Java API. ODBC全称 Open Database Conn ...
- JDBC学习笔记(2)——Statement和ResultSet
Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement ...
- JDBC学习笔记(1)——JDBC概述
JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数 ...
- 【转】JDBC学习笔记(2)——Statement和ResultSet
转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数 ...
- 【转】JDBC学习笔记(1)——JDBC概述
转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...
- JDBC学习笔记(1)
说明:本系列学习笔记主要是学习传智播客的李勇老师的教学课程和一本英文电子书<JDBC Recipes A Problem-Solution Approach>所作的笔记. 1,什么是JDB ...
随机推荐
- css中伪元素before或after中content的特殊用法attr
html代码如下: <div class="haorooms"> <span data-haorooms="haorooms鼠标效果tips-纯css& ...
- [转载] Android动态加载Dex机制解析
本文转载自: http://blog.csdn.net/wy353208214/article/details/50859422 1.什么是类加载器? 类加载器(class loader)是 Java ...
- [Swift] 疑难杂症
[Swift] 疑难杂症 1.class .... has no initializers --> class 的每一个元素都需要初始化,否则会报错,除了可空元素
- -[UIKeyboardLayoutStar release]: message sent to deallocated instance 0x7fbe49120000
__NSArrayM objectAtIndex: 取消swizzle 只有debug的时候会报错,发布的时候是好的,所以可以不用改
- Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中web相关的知识(概述)
Spring Framework中web相关的知识 1.概述: 参考资料:官网documentation中第22小节内容 关于spring web mvc: spring framework中拥有自 ...
- Spring Framework------>version4.3.5----->Reference学习心得----->总结
1.Spring Framework概述: 有很多可用版本,网址http://projects.spring.io/spring-framework/ 2.Spring Framework ...
- 我的 C++ style
int g_tennis; // not use as possible int make_world() { ; return size; } ; enum Color { RED, GREEN } ...
- 第七章 consul docker集群
--net=host:运行consul的docker镜像必须带有的参数,因为consul的consensus和gossip协议对于网络的延迟和丢包很敏感,所以引入额外的其他网络类型的层是不可取并且不必 ...
- 总结A*,Dijkstra,广度优先搜索,深度优先搜索的复杂度比较
广度优先搜索(BFS) 1.将头结点放入队列Q中 2.while Q!=空 u出队 遍历u的邻接表中的每个节点v 将v插入队列中 当使用无向图的邻接表时,复杂度为O(V^2) 当使用有向图的邻接表时, ...
- Dijkstra搜索算法
Dijkstra无向图 算法执行步骤如下: 上面两张图来源于:http://blog.csdn.net/v_july_v/article/details/6096981 很牛的大神,膜拜,此处有鲜花 ...