JDBC操作数据库的基本流程是什么


Posted in 面试题 onOctober 28, 2014
所有的JDBC应用程序都具有下面的基本流程:
  1、建立到数据库的连接。
  2、执行SQL语句。
  3、处理结果。
  4、从数据库断开连接。
  下面我们就来仔细看一看每一个步骤。

  建立到数据库的连接
  通过JDBC使用数据库的第一步就是建立一个连接。JDBC连接是由URL指定的,它的格式如下:
  jdbc::
  其中subprotocol是被请求的数据库连接的类型(如ODBC,ORACLE,Informix等等),而subname提供了所要建立的连接的一些附加信息。当JDBC驱动程序管理器收到一个连接的URL时,所有已知的JDBC驱动程序会被询问是否可以为这个URL服务。请求一个通过JDBC-ODBC桥到叫做MyData的ODBC数据源的连接的例子如下:
  Connection con = DriverManage.getconnection(“jdbc:odbc:MyData”);
  看上去一切都很顺利,但是JDBC驱动程序管理器是怎么知道哪些JDBC驱动程序在当前的系统中可用呢?有两种机制可以通知驱动程序管理器一个JDBC驱动程序可以使用:sql.drivers属性和JDBC驱动程序注册。
  驱动程序管理器引用sql.drivers系统属性来取得当前系统中可用的JDBC驱动程序列表。这个系统属性包含一些用冒号隔开的JDBC驱动程序的类名,通过这个类名,驱动程序管理器可以试图满足一个连接请求。
  使用驱动程序注册更为常见。这种方法使你对你要使用的JDBC驱动程序有更多的控制。所有的JDBC驱动程序在实例化的时候都必须在驱动程序管理器中注册自己,注册可以通过下列两个方法来实现:
  1.Class.forName(“foo.Driver”).newInstance();
  2.new foo.Driver();
  我个人比较喜欢使用Class.forName()这种方法,不过这两种方法的效果是相同的。JDBC驱动程序用驱动程序管理器注册自己,这样,它就可以为连接请求服务了。

  执行SQL语句
  在数据库连接成功建立之后,我们就可以执行那些完成实际工作的SQL语句了。在执行SQL语句之前,我们必须首先创建一个语句对象,这个对象提供了到特定数据库SQL引擎的接口。有下列三种不同类型的语句对象:
  1.Statement——基本的语句对象,它提供了直接在数据库中执行SQL语句的方法。对于那些只执行一次的查询以及DDL语句如CREATE TABLE,DROP TABLE等等来说,statement对象就足够了。
  2.Prepared statement——这种语句对象用于那些需要执行多次,每次仅仅是数据取值不同的SQL语句,它还提供了一些方法,以便指出语句所使用的输入参数。
  3.Callable statement——这种语句对象被用来访问数据库中的存储过程。它提供了一些方法来指定语句所使用的输入输出参数。
  下面是一个用语句类来执行SQL SELECT语句的一个例子:
  Statement stmt = con.createStatement();
  ResultSet rs = stmt.executeQuery(“SELECT * FROM MyTable”);

  处理结果
  在执行了一个SQL语句之后,我们必须处理得到的结果。有些语句仅仅返回一个整形数,指出受到影响的行数(比如UPDATE和DELETE语句)。SQL查询(SELECT语句)返回一个含有查询结果的结果集。结果集由行和列组成,各列数据可以通过相应数据库类型的一系列get方法(如getString,getInt,getDate等等)来取得。在取得了一行数据的所有数据之后,我们可以调用next()方法来移到结果集中的下一条记录。JDBC规范的1.1版只允许forward-onle(只向前)型的游标,而在JDBC2.0中有更健壮的游标控制功能,我们可以向后移动游标而且可以将游标移动到指定行。

  从数据库断开连接
  在结果集、语句和连接对象用完以后,我们必须正确地关闭它们。连接对象、结果集对象以及所有的语句对象都有close()方法,通过调用这个方法,我们可以确保正确释放与特定数据库系统相关的所有资源。
  有些开发者喜欢将引用乱放,然后用一个垃圾收集程序专门负责正确清除对象。我强烈建议大家在使用了JDBC驱动程序之后调用close()方法。这样可以尽可能的减少由于挂起的对象残留在数据库系统中而造成的内存泄漏。

Tags in this post...

面试题 相关文章推荐
PHP如何对用户密码进行加密
Jul 31 面试题
PHP如何去执行一个SQL语句
Mar 05 面试题
宝信软件JAVA工程师面试经历
Aug 19 面试题
什么是类的返射机制
Feb 06 面试题
C语言笔试题
Sep 04 面试题
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
Feb 22 面试题
上海微创软件面试题
Jun 14 面试题
提高EJB性能都有哪些技巧
Mar 25 面试题
不同浏览器创建XMLHttpRequest方法有什么不同
Nov 17 面试题
如果重写了对象的equals()方法,需要考虑什么
Nov 02 面试题
如何写出好的Java代码
Apr 25 面试题
送给程序员的20个Java集合面试问题
Aug 06 面试题
Python如何定义一个函数
Sep 01 #面试题
如何用Python输出一个Fibonacci数列
Aug 28 #面试题
Python面试题集
Mar 08 #面试题
Python中pass语句的作用是什么
Jun 01 #面试题
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
May 20 #面试题
介绍一下Python下range()函数的用法
Nov 07 #面试题
介绍一下except的用法和作用
Jan 22 #面试题
You might like
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
深入理解vue中的$set
2017/06/01 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
Python编程实现蚁群算法详解
2017/11/13 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
Python的UTC时间转换讲解
2019/02/26 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
python如何更新包
2020/06/11 Python
台湾最大网路书店:博客来
2018/03/18 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
班级聚会策划书
2014/01/16 职场文书
怎样写离婚协议书
2014/09/10 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android
使用scrapy实现增量式爬取方式
2022/06/21 Python