5.1.2 ODBC

5.1.2 ODBC

开放数据库互连(Open DataBase Connectivity,ODBC)标准定义了一个API,应用程序用它来打开一个数据库连接、发送查询和更新,以及获取返回结果等。应用程序(例如图形界面、统计程序包或者电子表格)可以使用相同的ODBC API来访问任何一个支持ODBC标准的数据库。
每一个支持ODBC的数据库系统都提供一个和客户端程序相连接的库,当客户端发出一个ODBC API请求,库中的代码就可以和服务器通信来执行被请求的动作并取回结果.

1 建立一个和服务器的链接

利用ODBC和服务器通信的第一步是,建立一个和服务器的连接。

为了实现这一步,程序先分配一个SQL的环境变量,然后是一个数据库连接句柄。ODBC定义了HENVHDBCRETCODE几种类型。程序随后利用SQLConnect打开和数据库的连接,这个调用有几个参数,包括数据库的连接句柄、要连接的服务器、用户的身份和密码等。常数SQL_ NTS表示前面参数是一个以n结尾的字符串。

2 通过SQLExecDirect语句把命令发送到数据库

一旦一个连接建立了,C语言就可以通过SQLExecDirect语句把命令发送到数据库。

因为C语言的变量可以和查询结果的属性绑定,所以当一个元组被SQLFetch语句取回的时候,结果中相应的属性的值就可以放到对应的C变量里了。 SQLBindCol做这项工作;在SQLBindCol函数里面第二个参数代表选择属性中哪一个位置的值,第三个参数代表SQL应该把属性转化成什么类型的C变量。再下一个参数给出了存放变量的地址。对于诸如字符数组这样的变长类型,最后两个参数还要给出变量的最大长度和一个位置来存放元组取回时的实际长度。如果长度域返回一个负值,那么代表着这个值为空(mu)。对于定长类型的变量如整型或浮点型,最大长度的域被忽略,然而当长度域返回一个负值时表示该值为空值。

SQLFetchwhile循环中一直执行,直到SQLFetch返回一个非sQL_ SUCCESS的值,在每一次fetch过程中,程序把值存放在调用SQLBindCol所说明的C变量中并把它们打印出来。

3 断开连接释放句柄

在会话结束的时候,程序释放语句的句柄,断开与数据库的连接,同时释放连接和SQL环境句柄。好的编程风格要求检查每一个函数的结果,确保它们没有错误,为了简洁,我们在这里忽略了大部分检查。

可以创建带有参数的SQL语句,例如, insert into department values(?,?,?)。问号是为将来提供值的占位符。上面的语句可以先被”准备”,也就是在数据库中先编译,然后可以通过为占位符提供具体值来反复执行——在该例中,为department关系提供系名、楼宇名和预算数。

ODBC为各种不同的任务定义了函数,例如查找数据库中所有的关系,以及查找数据库中某个关系的列的名称和类型,或者一个查询结果的列的名称和类型。
在默认情况下,每一个SQL语句都被认为是一个自动提交的独立事务。调用sQLSet ConnectOption(comn, SQL_ AUTOCOMMIT,0)可以关闭连接com的自动提交,事务必须通过显式地调用SQLTransact(comn, SQL _COMMIT)来提交或通过显式地调用SQLTransact(comn, SQL_ROLLBACK)来回滚。
ODBC标准定义了符合性级别( conformance level),用于指定标准定义的功能的子集。一个ODBC实现可以仅提供核心级特性,也可以提供更多的高级特性( level 1或level2)。 level I需要支持取得目录的有关信息,例如什么关系存在,它们的属性是什么类型的等。 level2需要更多的特性,例如发送和提取参数值数组以及检索有关目录的更详细信息的能力.
SQL标准定义了调用级接口( Call level Interface,CI),它与ODBC接口类似。

ADO.NET

ADO.NET API是为Visual basic.NET和C#语言设计的,它提供了一系列访问数据的函数,与JDBC在上层架构没有什么不同,只是在细节上有差别。像JDBCODBC一样,ADO.NET API可以访问SL查询的结果,以及元数据,但使用起来比ODBC简单得多。可以使用ADO.NET API来访问支持ODBC的数据库,此时,ADO.NET调用被转换成ODBC调用。ADO.NET API也可以用在某些非关系教据源上,例如微软的OLE-DBXML(在第23章介绍),以及微软最近开发的实体框架。有关ADO.NET的更多信息请参考文献注解。

我这里主要是用java来操作数据库,ODBC这里了解个大概即可