返回介绍

15.7.1 让示例运行起来

发布于 2024-10-15 23:56:34 字数 4414 浏览 0 评论 0 收藏 0

就 JDBC 来说,代码本身是很容易理解的。最令人迷惑的部分是如何使它在自己特定的系统上运行起来。之所以会感到迷惑,是由于它要求我们掌握如何才能使 JDBC 驱动程序正确装载,以及如何用我们的数据库管理软件来设置一个数据库。

当然,具体的操作过程在不同的机器上也会有所区别。但这儿提供的在 32 位 Windows 环境下操作过程可有效帮助大家理解在其他平台上的操作。

1. 步骤 1:寻找 JDBC 驱动程序

上述程序包含了下面这条语句:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

这似乎暗示着一个目录结构,但大家不要被它蒙骗了。在我手上这个 JDK 1.1 安装版本中,根本不存在叫作 JdbcOdbcDriver.class 的一个文件。所以假如在看了这个例子后去寻找它,那么必然会徒劳而返。另一些人提供的例子使用的是一个假名字,如“myDriver.ClassName”,但人们从字面上得不到任何帮助。事实上,上述用于装载 jdbc-odbc 驱动程序(实际是与 JDK 1.1 配套提供的唯一驱动)的语句在联机文档的多处地方均有出现(特别是在一个标记为“JDBC-ODBC Bridge Driver”的页内)。若上面的装载语句不能工作,那么它的名字可能已随着 Java 新版本的发布而改变了;此时应到联机文档里寻找新的表述方式。

若装载语句出错,会在这个时候得到一个违例。为了检验驱动程序装载语句是不是能正常工作,请将该语句后面直到 catch 从句之间的代码暂时设为注释。如果程序运行时未出现违例,表明驱动程序的装载是正确的。

2. 步骤 2:配置数据库

同样地,我们只限于在 32 位 Windows 环境中工作;您可能需要研究一下自己的操作系统,找出适合自己平台的配置方法。

首先打开控制面板。其中可能有两个图标都含有“ODBC”字样,必须选择那个“32 位 ODBC”,因为另一个是为了保持与 16 位软件的向后兼容而设置的,和 JDBC 混用没有任何结果。双击“32 位 ODBC”图标后,看到的应该是一个卡片式对话框,上面一排有多个卡片标签,其中包括“用户 DSN”、“系统 DSN”、“文件 DSN”等等。其中,“DSN”代表“数据源名称”(Data Source Name)。它们都与 JDBC-ODBC 桥有关,但设置数据库时唯一重要的地方“系统 DSN”。尽管如此,由于需要测试自己的配置以及创建查询,所以也需要在“文件 DSN”中设置自己的数据库。这样便可让 Microsoft Query 工具(与 Microsoft Office 配套提供)正确地找到数据库。注意一些软件公司也设计了自己的查询工具。

最有趣的数据库是我们已经使用过的一个。标准 ODBC 支持多种文件格式,其中包括由不同公司专用的一些格式,如 dBASE。然而,它也包括了简单的“逗号分隔 ASCII”格式,它几乎是每种数据工具都能够生成的。就目前的例子来说,我只选择自己的“people”数据库。这是我多年来一直在维护的一个数据库,中间使用了各种联络管理工具。我把它导出成为一个逗号分隔的 ASCII 文件(一般有个.csv 扩展名,用 Outlook Express 导出通信簿时亦可选用同样的文件格式)。在“文件 DSN”区域,我按下“添加”按钮,选择用于控制逗号分隔 ASCII 文件的文本驱动程序(Microsoft Text Driver),然后撤消对“使用当前目录”的选择,以便导出数据文件时可以自行指定目录。

大家会注意到在进行这些工作的时候,并没有实际指定一个文件,只是一个目录。那是因为数据库通常是由某个目录下的一系列文件构成的(尽管也可能采用其他形式)。每个文件一般都包含了单个“数据表”,而且 SQL 语句可以产生从数据库中多个表摘取出来的结果(这叫作“联合”,或者 join)只包含了单张表的数据库(就象目前这个)通常叫作“平面文件数据库”。对于大多数问题,如果已经超过了简单的数据存储与获取力所能及的范围,那么必须使用多个数据表。通过“联合”,从而获得希望的结果。我们把这些叫作“关系型”数据库。

3. 步骤 3:测试配置

为了对配置进行测试,需用一种方式核实数据库是否可由查询它的一个程序“见到”。当然,可以简单地运行上述的 JDBC 示范程序,并加入下述语句:

Connection c = DriverManager.getConnection(

dbUrl, user, password);

若掷出一个违例,表明你的配置有误。

然而,此时很有必要使用一个自动化的查询生成工具。我使用的是与 Microsoft Office 配套提供的 Microsoft Query,但你完全可以自行选择一个。查询工具必须知道数据库在什么地方,而 Microsoft Query 要求我进入 ODBC Administrator 的“文件 DSN”卡片,并在那里新添一个条目。同样指定文本驱动程序以及保存数据库的目录。虽然可将这个条目命名为自己喜欢的任何东西,但最好还是使用与“系统 DSN”中相同的名字。

做完这些工作后,再用查询工具创建一个新查询时,便会发现自己的数据库可以使用了。

4. 步骤 4:建立自己的 SQL 查询

我用 Microsoft Query 创建的查询不仅指出目标数据库存在且次序良好,也会自动生成 SQL 代码,以便将其插入我自己的 Java 程序。我希望这个查询能够检查记录中是否存在与启动 Java 程序时在命令行键入的相同的“姓”(Last Name)。所以作为一个起点,我搜索自己的姓“Eckel”。另外,我希望只显示出有对应 E-mail 地址的那些名字。创建这个查询的步骤如下:

(1) 启动一个新查询,并使用查询向导(Query Wizard)。选择“people”数据库(等价于用适应的数据库 URL 打开数据库连接)。

(2) 选择数据库中的“people”表。从这张数据表中,选择 FIRST,LAST 和 EMAIL 列。

(3) 在“Filter Data”(过滤器数据库)下,选择 LAST,并选择“equals”(等于),加上参数 Eckel。点选“And”单选钮。

(4) 选择 EMAIL,并选中“Is not Null”(不为空)。

(5) 在“Sort By”下,选择 FIRST。

查询结果会向我们展示出是否能得到自己希望的东西。

现在可以按下 SQL 按钮。不需要我们任何方面的介入,正确的 SQL 代码会立即弹现出来,以便我们粘贴和复制。对于这个查询,相应的 SQL 代码如下:

SELECT people.FIRST, people.LAST, people.EMAIL
FROM people.csv people
WHERE (people.LAST='Eckel') AND 
(people.EMAIL Is Not Null)
ORDER BY people.FIRST

若查询比较复杂,手工编码极易出错。但利用一个查询工具,就可以交互式地测试自己的查询,并自动获得正确的代码。事实上,亲手为这些事情编码是难以让人接受的。

5. 步骤 5:在自己的查询中修改和粘贴

我们注意到上述代码与程序中使用的代码是有所区别的。那是由于查询工具对所有名字都进行了限定,即便涉及的仅有一个数据表(若真的涉及多个数据表,这种限定可避免来自不同表的同名数据列发生冲突)。由于这个查询只需要用到一个数据表,所以可考虑从大多数名字中删除“people”限定符,就象下面这样:

SELECT FIRST, LAST, EMAIL
FROM people.csv people
WHERE (LAST='Eckel') AND 
(EMAIL Is Not Null)
ORDER BY FIRST

此外,我们不希望“硬编码”这个程序,从而只能查找一个特定的名字。相反,它应该能查找我们在命令行动态提供的一个名字。所以还要进行必要的修改,并将 SQL 语句转换成一个动态生成的字串。如下所示:

"SELECT FIRST, LAST, EMAIL " +
"FROM people.csv people " +
"WHERE " +
"(LAST='" + args[0] + "') " +
" AND (EMAIL Is Not Null) " +
"ORDER BY FIRST");

SQL 还有一种方式可将名字插入一个查询,名为“程序”(Procedures),它的速度非常快。但对于我们的大多数实验性数据库操作,以及一些初级应用,用 Java 构建查询字串已经很不错了。

从这个例子可以看出,利用目前找得到的工具——特别是查询构建工具——涉及 SQL 及 JDBC 的数据库编程是非常简单和直观的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文