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

面试题 相关文章推荐
上海方立数码笔试题
Oct 18 面试题
.NET方向面试题
Nov 20 面试题
什么是.net的Remoting技术
Jul 08 面试题
UDP协议功能
Jan 06 面试题
OSPF有什么优点?为什么OSPF比RIP收敛快?
Feb 13 面试题
C#如何进行LDAP用户校验
Nov 21 面试题
简述安装Slackware Linux系统的过程
May 08 面试题
Linux Interview Questions For software testers
Jun 02 面试题
介绍一下grep命令的使用
Jun 28 面试题
是否可以从一个static方法内部发出对非static方法的调用?
Aug 18 面试题
介绍下Java中==和equals的区别
Sep 01 面试题
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开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
2017/09/01 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
javascript简单实现命名空间效果
2014/03/06 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
Python编程中的反模式实例分析
2014/12/08 Python
python tornado微信开发入门代码
2018/08/24 Python
如何基于python操作json文件获取内容
2019/12/24 Python
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
Saucony澳大利亚官网:美国跑鞋品牌,运动鞋中的劳斯莱斯
2018/05/05 全球购物
总会计师岗位职责
2014/02/19 职场文书
租车协议书范本
2014/04/22 职场文书
教师节慰问信
2015/02/15 职场文书
护士自荐信怎么写
2015/03/06 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android