JDBCTM 指南:入门2 - 连接
本文将介绍一本即将由JavaSoft编写,名为《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference》的书籍的概述。这本书预计将于1997年春季由Addison-Wesley出版公司出版,它将作为Java系列的重要教程和参考手册。
这本书的第二部分将重点介绍Connection对象,该对象代表与数据库的连接。通过Connection对象,我们可以执行SQL语句并获取结果。一个应用程序可以与单个数据库建立一个或多个连接,或者与多个数据库建立连接。
建立与数据库的连接的标准方法是通过调用DriverManager.getConnection方法,并传入一个包含URL的字符串。DriverManager类(即JDBC管理层)会尝试找到合适的驱动程序来连接URL所表示的数据库。DriverManager类维护了一个已注册的Driver类的列表。当调用getConnection方法时,它会检查列表中的每个驱动程序,直到找到能够与URL中指定数据库连接的驱动程序为止。然后,该Driver的connect方法会使用这个URL来建立实际的连接。
虽然用户可以选择绕过JDBC管理层直接调用Driver方法,但在大多数情况下,让DriverManager类处理打开连接会更简单。以下是一个示例代码,演示如何打开一个连接到URL为"jdbc:odbc:wombat"的数据库。在此示例中,使用的用户名为"oboy",口令为"12Java"。
为了打开与数据库的连接,我们需要理解URL的结构和用途。URL(统一资源定位符)提供在Internet上定位资源所需的信息。它类似于一个地址,其中URL的第一部分指定了访问信息所使用的协议,后面跟着冒号。常见的协议包括"ftp"(代表文件传输协议)和"http"(代表超文本传输协议)。对于JDBC URL,它们提供了一种标识数据库的方法,以便相应的驱动程序可以识别并与之建立连接。
JDBC URL的构造遵循一些约定,这些约定是灵活的,允许不同的驱动程序使用不同的方案来命名数据库。例如,odbc子协议允许(但并不要求)URL包含属性值。JDBC URL还应允许驱动程序编程员编入所有必要的信息,这样,无需用户进行任何系统管理工作,就可以与给定的数据库对话的applet就可以打开数据库连接。JDBC URL还应允许某种程度的间接性,这意味着JDBC URL可以指向逻辑主机或数据库名,这种逻辑名称将通过网络命名系统动态转换为实际的名称。
网络时代,数据库连接不再受限。系统管理员无需特定声明主机为JDBC名称的一部分。网络命名服务如DNS、NIS和DCE等,为数据库连接提供了多种选择,无特定偏好。JDBC URL的标准语法包括三部分,分别是协议、子协议和子名称。协议固定为jdbc,子协议则是驱动程序或数据库连接机制的名称。例如,"odbc"这一子协议专门用于指定ODBC风格的数据资源名称的URL。在访问数据库时,可以使用不同的URL格式。如果采用网络命名服务,URL中的数据库名称不必是实际名称。DCE命名服务可以被用作子协议,数据库名称为更具体的连接名称。子名称是另一种数据库标识方法,可以根据不同的子协议变化,并可以包含子名称的子名称。使用子名称的目的是提供足够的信息以定位数据库。对于位于远程服务器上的数据库,网络地址会被包含在JDBC URL的子名称中。例如,“db”是一种用于将主机连接到网络上的协议,相应的JDBC URL会包含主机名、端口和子协议等信息。
关于odbc子协议,这是一种特殊情况,专门用于指定ODBC风格的数据资源名称的URL。它允许在子名称(数据资源名称)后面指定多个属性值。例如,可以包含缓存大小、扩展案例等属性。驱动程序开发者可以保留某个名称作为JDBC URL的子协议名。当DriverManager类将此名称添加到已注册的驱动程序清单中时,相应的驱动程序能够识别该名称并与所标识的数据库建立连接。例如,“odbc”是为JDBC-ODBC桥保留的。其他公司如Miracle可能会注册“miracle”作为连接到其Miracle DBMS上的JDBC驱动程序的子协议。一旦连接建立,就可以通过JDBC发送SQL语句到数据库。对于发送的SQL语句类型,JDBC没有限制,这提供了很大的灵活性。用户需要确保所涉及的数据库能够处理所发送的SQL语句,否则可能会遇到问题。例如,如果应用程序试图向不支持存储程序的DBMS发送存储程序调用,将会失败并抛出异常。符合JDBC标准的驱动程序至少需要提供ANSI SQL-2入门级功能。这意味着用户可以信赖这一标准级别的功能。为了向数据库发送SQL语句,可以使用三个类:Statement、PreparedStatement等。这些类的实例可以通过Connection接口中的相应方法创建。通过优化SEO,狼蚁网站的搜索引擎排名将得到提升。
当我们谈论数据库操作时,CallableStatement是一个特殊类型的Statement,通过prepareCall方法创建。CallableStatement对象主要用于执行SQL存储过程,这些存储过程是一组可以通过名称调用的SQL语句,类似于函数调用。它不仅继承了PreparedStatement处理IN参数的方法,还增加了处理OUT参数和INOUT参数的方法。
当我们谈论数据库事务时,我们指的是一个或多个已经执行、完成并准备提交或还原的语句集合。事务的结束取决于是否调用mit或rollback方法。在默认的情况下,新连接处于自动提交模式,这意味着每个语句执行后都会自动提交。但如果禁用自动提交模式,事务将包含自上次调用mit或rollback方法以来所有执行的语句。只有当mit方法被调用时,事务中的语句才会被提交,使SQL语句对数据库的更改成为永久性的。而rollback方法则会撤销事务中的所有更改。
事务隔离级别是DBMS管理事务的另一种方式,特别是在多个事务同时操作同一数据库时。用户可以通过设置事务隔离级别来指示DBMS如何解决潜在冲突。例如,用户可以选择在值被其他事务提交或还原之前是否允许读取(即脏读取)。隔离级别的选择需要在性能需求和数据一致性需求之间进行权衡。级别越高,冲突的可能性越小,但应用程序的执行速度可能会更慢。
在创建Connection对象时,事务隔离级别通常取决于所使用的数据库驱动程序和数据库的默认值。用户可以通过setIsolationLevel方法来更改事务隔离级别,但必须在事务开始前进行设置,并在事务结束后复位。在事务进行中途更改隔离级别可能会导致不可预测的结果,因为这将立即触发mit方法的调用,使之前的更改成为永久性的。
对于数据库开发者来说,理解PreparedStatement、CallableStatement、事务以及事务隔离级别的概念是至关重要的。它们为管理数据库操作提供了强大的工具,帮助确保数据的完整性和一致性。
编程语言
- JDBCTM 指南:入门2 - 连接
- php5.5使用PHPMailer-5.2发送邮件的完整步骤
- PHP基于单例模式编写PDO类的方法
- angularjs实现对表单输入改变的监控(ng-change和wat
- vue实现底部菜单功能
- 纯JavaScript手写图片轮播代码
- react-native android状态栏的实现
- php实现 master-worker 守护多进程模式的实例代码
- 微信小程序Server端环境配置详解(SSL, Nginx HTT
- Nodejs 和Session 原理及实战技巧小结
- Bootstrap Table服务器分页与在线编辑应用总结
- Node错误处理笔记之挖坑系列教程
- jQuery简单实现的HTML页面文本框模糊匹配查询功能
- 聊一聊Vue.js过渡效果
- 利用Ionic2 + angular4实现一个地区选择组件
- 深入理解PHP中mt_rand()随机数的安全