What Is JDBC ?
JDBC 是java编程中一系列允许简单连接到很多数据库(特别是关系型数据库)编程APIs . In Java 2 Platform, Standard Edition (J2SE) 5.0,
JDBC API 由两个包定义:
java.sql :提供java访问处理贮存在数据源(特别是关系型数据库)中的数据,有最基础常用的对象如Connection, ResultSet, Statement, and PreparedStatement。这个包j2se 和j2ee平台都可使用。
javax.sql:提供java访问处理服务器端数据源。这个包给j2ee提供服务,如DataSource 和RowSet。
ODBC bridge是以ODBC标准 C API 方式实现JDBC 的库。
简而言之,JDBC是一个和database-independent 的访问数据库的API。
DriverManager是唯一可以创建数据库连接的类。DriverManager根据各个厂商(如Oracle, MySQL, and Sybase)提供的驱动创建数据库。
What Is ODBC ?
Open Database Connectivity (ODBC) 是一种来自微软的编程接口,他为Windows应用程序访问网络上数据库提供了通用语言。 ODBC is a C-based interface
to SQL-based database systems. It provides a consistent interface for communicating with a database and for accessing database metadata (information about the database system vendor and how the tables, views, and data are stored).ODBC作为标准出现。厂商为各自的DBMS提供了各种的驱动或bridges。从java客户端访问ODBC-based数据库,可以使用JDBC-ODBC bridge,因此可以使用JDBC-ODBC bridge访问支持ODBC的数据库,比如Microsoft Access。微软为他的操作系统提供ODBC driver manager。ODBC driver manager协调访问ODBC驱动和对应的数据源。
问题:如果用c++写数据库客户端,你不得不在另一平台重新写客户端;PC版的不能在Macintosh上运行。两个原因:1.c++不是跨平台的,很多东西没有特别指定(如int型用多少位表示)2 更重要的是,想网络访问,GUI框架库等在各个平台不同。ODBC的另一个问题是,接口复杂学习时间长。JDBC去除了这些问题,为访问关系数据库引入平台无关的解决方案。因为性能问题和缺少事务支持, JDBC-ODBC bridge 驱动只适合实验用或没有其他可选方法。
What Is a JDBC-ODBC Bridge?
简而言之,JDBC-ODBC bridge通过大多数ODBC驱动来提供JDBC访问。它是一个把JDBC操作转换为ODBC操作的JDBC驱动。(ODBC操作是由 C-based libraries实现的——ODBC功能仍然在二进制代码库中;如果数据库或硬件平台更换,需要替换ODBC库)。brige作为sun.jdbc.odbc包实现,包含一个native library用来访问ODBC。sun.jdbc.odbc包在/jre/lib/rt.jar中,包含一个sun.jdbc.odbc.JdbcOdbcDriver类,用来JDBC驱动。注意,JDBC-ODBC bridge是一种“万能”的方式,因此可能比一些特别设计的JDBC驱动慢。
SQL is a Data Manipulation Language (DML—影响数据库对象内容的命令集) and a Data Definition Language (DDL—影响数据库对象结构的命令集).SQL also 提供控制事务命令 (such as commit and rollback)
连接jdbc的过程参考JDBC加载分析 。总之JDBC驱动的作用是提供各种数据库的具体实现(实现了java.sql.Driver接口),隐藏具体数据库的细节(每个数据库厂商可能会为同一个数据库提供不止一个驱动,这些效率,价格/性能会有不同)。
在fianlly中立刻关闭/释放 JDBC资源(such as the ResultSet, Statement, PreparedStatement, and Connection objects),而不是等他们自己关闭,会改进应用程序的性能。写一个工具类释放这些资源是一个好办法。
JDBC API主要用来传SQL statement给数据库,但也能读写表格式数据源的数据,这种来自javax.sql.RowSet组接口的读写能力可以被定制去使用更新spreadsheet,flat file 类似表格式数据源的数据。
JDBC有四种类型的驱动连接数据库。
异常:SQLException:有getNextException()可以链接一系列异常,还有很多方法可以展示额外的错误/异常信息。SQLWarning:SQLException的子类,表示非致命可忽略BatchUpdateException:批量更新时出现的错误,除了SQLException提供的信息,还有错误发生前已成功执行多少条数据DataTruncation:意外truancate 数据抛出。