5.1 使用程序设计语言访问数据库

5.1 使用程序设计语言访问数据库

为什么数据库程序员必须能够使用通用程序设计语言

SQL提供了一种强大的声明性查询语言。实现相同的查询,用SQL写查询语句比用通用程序设计语言要简单得多。然而,数据库程序员必须能够使用通用程序设计语言,原因至少有以下两点:

  1. 因为SQL没有提供通用程序设计语言那样的表达能力,所以SQL并不能表达所有查询要求。也就是说,有可能存在这样的查询,可以用C、JavaCobol编写,而用SQL做不到。要写这样的查询,我们可以将SQL嵌入到一种更强大的语言中。
  2. 非声明性的动作(例如打印一份报告、和用户交互,或者把一次查询的结果送到一个图形用户界面中)都不能用SQL实现。一个应用程序通常包括很多部分,查询或更新数据只是其中之一,而其他部分则用通用程序设计语言实现。对于集成应用来说,必须用某种方法把SQL与通用编程语言结合起来。

通用编程语言中访问SQL的方法

可以通过以下两种方法从通用编程语言中访问SQL:

  1. 动态SQL:通用程序设计语言可以通过函数(对于过程式语言)或者方法(对于面向对象的语言)来连接数据库服务器并与之交互。利用动态SQL可以在运行时以字符串形式构建SQL查询,提交查询,然后把结果存入程序变量中,每次一个元组。动态SQLSQL组件允许程序在运行时构建和提交SQL查询。
    • 在这一章中,我们将介绍两种用于连接到SQL数据库并执行查询和更新的标准。一种是Java语言的应用程序接口JDBC(5.1.1节)。另一种是ODBC(5.1.2节),ODBC最初是为C语言开发的,后来扩展到其他语言如C++、C#和Visual basic
  2. 嵌入式SQL:与动态SQL类似,嵌人式SL提供了另外一种使程序与数据库服务器交互的手段。然而,嵌入式S0L语句必须在编译时全部确定,并交给预处理器。预处理程序提交SQL语句到数据库系统进行预编译和优化,然后它把应用程序中的SQL语句替换成相应的代码和函数,最后调用程序语言的编译器进行编译。5.1.3节涵盖嵌入式SQL的内容。

SQL与通用程序语言相结合的问题

SQL与通用程序语言相结合的主要挑战是:
这些语言处理数据的方式互不兼容

  • SOL中,数据的主要类型是关系SQL语句在关系上进行操作,并返回关系作为结果。
  • 程序设计语言通常一次操作一个变量,这些变量大致相当于关系中一个元组的一个属性的值。
  • 因此,为了在同一应用中整合这两类语言,必须提供一种转换机制,使得程序语言可以处理查询的返回结果

可先学习数据库设计 在看本章

注意关于章节的先后顺序:
数据库设计(第7章和第8章)可以脱离本章独立学习。
完全可以先学习数据库设计,再读本章内容。然而,对于强调编程能力的课程而言,在学习了5.1节之后可以做更多的实验练习,所以我们建议在学习数据库设计之前先掌握这部分的内容。