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经典面试题
Sep 03 面试题
纬创Java面试题笔试题
Oct 02 面试题
求∏的近似值,直到最后一项的绝对值小于指定的数
Feb 12 面试题
介绍一下内联、左联、右联
Dec 31 面试题
存储过程的优点有哪些
Sep 27 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述。
Nov 09 面试题
TCP/IP模型的分界线
Dec 01 面试题
成都思必达公司C#程序员招聘面试题
Jun 26 面试题
介绍一下linux的文件权限
Jul 20 面试题
软件测试工程师结构化面试题库
Nov 23 面试题
Python的两道面试题
Jun 29 面试题
介绍下Lucene建立索引的过程
Mar 02 面试题
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冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
php中序列化与反序列化详解
2017/02/13 PHP
php curl发送请求实例方法
2019/08/01 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
python从ftp下载数据保存实例
2013/11/20 Python
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
Python读写操作csv和excle文件代码实例
2020/03/16 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
python 实现有道翻译功能
2021/02/26 Python
销售文员的岗位职责
2013/11/20 职场文书
全国道德模范事迹
2014/02/01 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
钱塘江大潮导游词
2015/02/03 职场文书