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...

面试题 相关文章推荐
Web Service面试题:如何搭建Axis2的开发环境
Jun 20 面试题
广州一家公司的.NET面试题
Jun 11 面试题
什么是索引指示器
Aug 20 面试题
几个Shell Script面试题
Apr 18 面试题
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
Jun 05 面试题
如果Session Bean得Remove方法一直都不被调用会怎么样
Jul 14 面试题
EntityManager都有哪些方法
Nov 01 面试题
GWT的应用有哪两种部署模式
Dec 21 面试题
Ajxa常见问题都有哪些
Mar 26 面试题
如何写一个Java类既可以用作applet也可以用作java应用
Jan 18 面试题
同步和异步有何异同,在什么情况下分别使用他们?
Dec 28 面试题
Servlet如何得到服务器的信息
Dec 22 面试题
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 socket(fsockopen)的应用实例分析
2013/06/02 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
用js实现in_array的方法
2013/11/05 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
python实现学员管理系统
2019/02/26 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
python脚本开机自启的实现方法
2019/06/28 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
计算机科学与技术应届生求职信
2013/11/07 职场文书
司机岗位职责
2013/11/15 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
孝老爱亲模范事迹
2014/01/24 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android