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如何设置和取得Cookie值
Jun 30 面试题
康拓普公司Java笔面试
Sep 23 面试题
如何向接受结构参数的函数传入常数值
Feb 17 面试题
凌阳科技股份有限公司C++程序员面试题笔试题
Nov 20 面试题
如何打印出当前源文件的文件名以及源文件的当前行号
Apr 05 面试题
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
Aug 13 面试题
CSMA/CD介质访问控制协议
Nov 17 面试题
华三通信H3C面试题
May 15 面试题
介绍一下Linux内核的排队自旋锁
Aug 27 面试题
简述安装Slackware Linux系统的过程
May 08 面试题
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
Jan 06 面试题
Servlet面试题库
Jul 18 面试题
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
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
jquery.validate使用详解
2016/06/02 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
Python语言实现将图片转化为html页面
2017/12/06 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
机票销售员态度不好检讨书
2014/09/27 职场文书
财务会计实训报告
2014/11/05 职场文书
行政二审代理词
2015/05/25 职场文书
小学大队委竞选口号
2015/12/25 职场文书
教学反思怎么写
2016/02/24 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
Java Spring Lifecycle的使用
2022/05/06 Java/Android
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS