版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简介:学习如何创建自文档化 SQL 命令文件,通过将 SQL 命令与有用的注释一起放置在文本文件中,可以根据需要执行任意多次。介绍 SQL 脚本文件的基本原理之后,本文展示了三种执行脚本文件的方法。然后您将回顾使用 SQL INSERT 语句将数据插入表中的基本原理,其中包括查看使用不同方式插入 10 个新行的示例。最后,本文展示了一个脚本,该脚本自动化该 INSERT 操作并显示新插入的数据以供验证。SQL 脚本在本系列的上一篇文章 “用 Apache Derby 进行数据库开发,第 2 部分:模式”(2006 年 4 月),在 ij 工具的提示符处直接执行 SQL 命令。通过使用 ij 工
2、具,可以简单地用不同的 SQL 或 Derby 命令进行试验。但是,通常您将需要执行多个复杂的命令。为了简化调试一组复杂的 SQL 命令,将其写入文本文件中然后一次执行文本文件中的所有命令通常更加容易。该操作被称为运行 SQL 脚本,可以通过使用 Apache Derby 很容易地实现该操作。通过将 SQL 命令放置在脚本文件中,您将获得能够根据需要多次执行命令的附加好处。脚本文件不难使用,如 清单 1 所示的第一个 Derby SQL 脚本示例。清单 1. 第一个 Derby SQL 脚本- Ignore the database not created warning if present
3、connect jdbc:derby:test;create=true ;- First delete the tables if they exist. - Ignore the table does not exist error if presentDROP TABLE ducts ;DROP TABLE bigdog.vendors ;- CREATE the products table for bigdogs Surf ShopCREATE TABLE ducts (itemNumber INT NOT NULL,price DECIMAL(
4、5, 2),stockDate DATE,description VARCHAR(128) ;- CREATE the products table for bigdogs Surf ShopCREATE TABLE bigdog.vendors (itemNumber INT NOT NULL,vendornumber INT NOT NULL,vendorName CHAR(64) ;exit ;清单 1 所示的脚本重新创建了本系列上一篇文章中演示的 bigdog 模式和两个表(products 和 vendors)。如果不清楚其中任何一个概念,在继续本文之前您应该返回并 阅读该文章。因为
5、本文将介绍将数据插入表的基本原理,所以您首先需要创建准备接受新数据的表。 编辑 Derby SQL 脚本脚本文件只是一种包含可以从 Apache Derby ij 工具直接运行的 SQL 命令和 Apache Derby 命令的组合的文本文件。脚本文件简化了 Apache Derby 数据库的开发和维护,并提供了一种用于构建数据库的自文档化技术。您应该将这些文件存储为 ASCII 文本文件,而非 RTF 文件(或其他任何格式),以防止文本编码错误。一些文本应用程序(比如 Microsoft Windows 系统中的写字板)可能试图将文件自动保存为富文本文件。一定要小心这一点,否则可能在尝试执行
6、脚本文件时出现问题。 无需将用于创建表的 SQL 命令直接输入到 Derby ij 工具中,您可以将其放入文本文件中,并让 ij 工具直接运行文件中的命令。本文包括一个 .zip 文件(参阅 下载清单 1 所示。因为本文将逐步介绍该脚本文件中的代码行,所以您既可以参照 清单 1 所示的代码,也可以用您偏爱的文本编辑器打开该脚本文件。 该脚本文件包括了用两个破折号 (-) 开头的几行。这些行是 SQL 注释;您应该使用它们来提供脚本文件中每个主要组件的用途的基本描述。 脚本中的第一个实际命令是 Derby connect 命令,它告诉 ij 工具连接 test 数据库,必要的话要先创建数据库。下
7、一个命令是 SQL DROP 语句,它删除 bigdog 模式中的产品和供应商表。如果表不存在(当数据库刚创建时就会出现这种情况),将显示一条错误消息;但前面的 SQL 注释指明,您可以安全地忽略这些消息。 如果存在的话,首先放弃这些表,以便您可以用所需的正确的列定义创建新表。后两条 SQL 语句就执行该操作,在 bigdog 模式中创建产品和供应商表。脚本以 exit 命令结束,终止了与数据库的连接,并允许 ij 工具优雅地退出。下一步将学习如何执行 Derby 脚本文件。在 ij 中运行脚本脚本文件仅在可用于执行文件中列出的命令时才有用。要执行 SQL 脚本文件中的命令,最简单的方法是从
8、ij 工具中运行脚本文件。但是,在可以运行之前,需要创建一个测试目录并展开 derby4.zip 文件,该文件可在本文下载(参阅 下载 一节)。该过程如 清单 2 所示。 清单 2. 在 ij 中运行 SQL 脚本rb$ mkdir testrb$ cp derby4.zip test/rb$ cd test/rb$ unzip derby4.zip Archive: derby4.zip inflating: derby.create.sql inflating: derby.insert.sql rb$ lsderby.create.sql derby.insert.sql derby4.
9、ziprb$ java org.apache.derby.tools.ij ij version 10.1ij run derby.create.sql ;ij - Ignore the database not created warning if presentconnect jdbc:derby:test;create=true ;ij - First delete the tables if they exist. - Ignore the table does not exist error if presentDROP TABLE ducts ;ERROR 42
10、Y07: Schema BIGDOG does not existij DROP TABLE bigdog.vendors ;ERROR 42Y07: Schema BIGDOG does not existij - CREATE the products table for Bigdogs Surf ShopCREATE TABLE ducts (itemNumber INT NOT NULL,price DECIMAL(5, 2),stockDate DATE,description VARCHAR(128) ;0 rows inserted/updated/delet
11、edij - CREATE the products table for Bigdogs Surf ShopCREATE TABLE bigdog.vendors (itemNumber INT NOT NULL,vendornumber INT NOT NULL,vendorName CHAR(64) ;0 rows inserted/updated/deletedij exit ; 虽然 清单 2 似乎对于执行 Derby 脚本有些冗长,但过程十分简单。该示例假设您具有开放的终端(或Windows Command 进程窗口,但要注意,本例中的一些步骤是特定于 UNIX 的),并且您已经更改
12、到保存包含本文提供的 两个脚本文件create 脚本文件; insert 脚本文件将在本文的最后使用。 如果出问题怎么办? 确保 Derby ij 工具正确启动。若非如此,您可能遇到 CLASSPATH 工具问题。 确保具有创建新数据库的空闲磁盘空间。 确保在试图执行脚本文件的目录中具有正确的权限(读取脚本文件和创建新数据库)。 确保脚本文件是简单的 ASCII 文本文件。如果全都不是,则检查最新的 Derby 文档,该文档可从 Apache Derby Web 站点(参阅 参考资料 一节中的链接)上免费获得,或在 Derby 邮件列表中询问您的问题。 清单 2本系列第一篇文章 中提供的 De
13、rby 安装验证步骤。看到 ij 提示之后,就可以运行合适的脚本文件了。通过使用 run 命令可实现该操作,该命令接受单个参数:单引号括起的脚本文件名。当该脚本执行时,您可能会看到新 ij 提示、命令和警告或错误消息的组合。这种显示可能有些笨拙,但 run 命令会执行您的脚本文件,就像您直接将命令键入 ij 工具中一样。最后,处理 exit 命令,脚本完成,关闭 ij 工具。如果第一个脚本执行的输出与 清单 2 所示的相匹配,那么恭喜您了。您现在已经有了一个带有两个可以保存数据的新表的新测试数据库了。 虽然从 ij 工具中执行脚本十分有效,但是有时候进一步自动化该过程会更加容易。下一节将讨论如
14、何从命令行直接执行 Derby 脚本文件。 从命令行运行脚本本节介绍从命令行运行脚本的两种方法。第一种方法如 清单 3 所示。 清单 3. 从命令行运行 SQL 脚本rb$ java org.apache.derby.tools.ij derby.create.sqlij version 10.1ij - Ignore the database not created warning if presentconnect jdbc:derby:test;create=true ;WARNING 01J01: Database test not created, connection made t
15、o existing database instead.ij - First delete the tables if they exist. - Ignore the table does not exist error if presentDROP TABLE ducts ;0 rows inserted/updated/deletedij DROP TABLE bigdog.vendors ;0 rows inserted/updated/deletedij - CREATE the products table for Bigdogs Surf ShopCREATE
16、 TABLE ducts (itemNumber INT NOT NULL,price DECIMAL(5, 2),stockDate DATE,description VARCHAR(128) ;0 rows inserted/updated/deletedij - CREATE the products table for Bigdogs Surf ShopCREATE TABLE bigdog.vendors (itemNumber INT NOT NULL,vendornumber INT NOT NULL,vendorName CHAR(64) ;0 rows i
17、nserted/updated/deletedij exit ; 清单 3清单 3 中的输出(一切都在清单中第一行之后)。如上所示,您收到一条警告消息,指明测试数据库未创建,因为它已经存在。但是,这次您不会收到指明不能放弃两个表的错误消息,因为您已经创建了它们(如 清单 2 所示)。在放弃产品和供应商表之后,您重新创建它们,脚本退出。 还有另一种方法来运行 Derby 脚本:重定向 ij 工具的标准输入以从脚本文件中读取。在基于 UNIX 的操作系统中,通过使用适合您的 shell 的 STDIN 重定向字符最容易实现了,比如为 Bash shell 使用小于号 ()。这种方法在 清单 4 中
18、展示,具有减少屏幕上显示的输出量的好处。 清单 4. 从命令行运行 SQL 脚本(第 2 部分)rb$ java org.apache.derby.tools.ij WARNING 01J01: Database test not created, connection made to existing database instead.ij 0 rows inserted/updated/deletedij 0 rows inserted/updated/deletedij 0 rows inserted/updated/deletedij 0 rows inserted/updated/d
19、eletedijrb$在 清单 4回页首在 Apache Derby 中插入数据构建数据库应用程序时最重要的任务之一是将数据插入到数据库中。这与数据库软件的好坏无关,如果将坏数据放入数据库中,其他一切都不重要了。有许多方法可以将数据插入数据库中,但下文将主要使用 SQL INSERT 语句将数据插入 Apache Derby 数据库中。 SQL INSERT 语句在使用 SQL INSERT 语句将数据插入 Apache Derby 数据库中之前,必须知道如果正确地使用该语句。清单 5 提供了 Apache Derby 中 SQL INSERT 语句的完整语法。 清单 5. SQL INSER
20、T 语法INSERT INTO table-Name (Simple-column-Name , Simple-column-Name* ) Expression该语法应该比较熟悉。如本系列的 上一篇文章 所述,方括号 ( ) 包括可选参数。其用途不是立即清楚的惟一组件是 Expression;但这个简单的短语能够有多复杂呢?当然,外表可能会蒙蔽人;Expression 词可以扩展为下列四个不同的结构之一: 单行 VALUES 列表 多行 VALUES 列表 SELECT 表达式 UNION 表达式其中,最后两个超出了本文范围,将在后续文章中详细介绍。前两个相似;惟一的区别在于第一种形式将一行
21、插入表中,而后一种形式将多行插入表中。 可以使用 SQL INSERT 语句的可选部分指定要插入到表中的值的列顺序。默认情况下,数据插入到表中的列顺序与创建表时列的列出顺序相同。有时候您希望更改这种顺序或可能希望只为具有 NOT NULL 约束的列指定值。通过在 SQL INSERT 语句中显式列出列,您将获得对操作的更多控制,并可以更容易地处理这些特定的用例。 SQL VALUES 表达式的语法相当简单,如 清单 6 所示。 清单 6. SQL VALUES 语法 VALUES ( Value , Value * ) , ( Value , Value * ) * | VALUES Valu
22、e , Value * 该语法首先显示多行格式,然后是单行格式(记住,竖线字符 | 表示或者,星号字符 * 表示一个或多个)。value 词表示想要插入特定列的值。要将数据插入多列,必须将一行的数据括在逗号分隔的括号内。 下面两节展示要实现的语法示例。 使用 SQL 插入数据如 清单 7 所示,要将数据插入表中,首先需要启动 ij 工具并连接数据库。记住,要将数据插入表中,表必须存在。如果还没有表的话,则执行本文之前所述的用于创建表的脚本。清单 7. 插入单行rb$ java org.apache.derby.tools.ij ij version 10.1ij connect jdbc:de
23、rby:test ;ij INSERT INTO ducts VALUES(1, 19.95, 2006-03-31, Hooded sweatshirt) ;1 row inserted/updated/deletedij INSERT INTO ducts(itemNumber, price, stockDate, description) VALUES(2, 99.99, 2006-03-29, Beach umbrella) ;1 row inserted/updated/deletedij INSERT INTO ducts
24、(itemNumber, price, stockDate) VALUES(3, 0.99, 2006-02-28) ;1 row inserted/updated/deletedij exit ;本例展示了对 ducts 表的三个单行插入。第一个 SQL INSERT 语句没有提供列列表;它插入 itemNumber、price、stockDate 和 description。注意,插入到 stockDate 和 description 列的值括在单引号字符中。description 列是长度可变的字符串,所以它预计是一个字符串(通过将字符数据括在单引号中指明)。另一方面
25、,stockDate 列是一个日期列;它需要您将日期括在单引号中以正确解析出正确的日、月和年信息。(有关 SQL INSERT 操作期间数据类型格式的更多指南,请阅读联机文档或参阅本系列的 上一篇文章。) 第二个 SQL INSERT 语句显式列出所有四列并相应地插入新值。最后一个 SQL INSERT 语句只列出三列并只插入三个值。description 列留为空白,这意味着它将具有 NULL 值。 虽然单行 SQL INSERT 语句可能有用,但当您需要插入多行时,直接插入多行可能更有效,如 清单 8 所示。 清单 8. 插入多行rb$ java org.apache.derby.tool
26、s.ij ij version 10.1ij connect jdbc:derby:test ;ij INSERT INTO ducts(itemNumber, price, stockDate, description) VALUES (4, 29.95, 2006-02-10, Male bathing suit, blue), (5, 49.95, 2006-02-20, Female bathing suit, one piece, aqua), (6, 9.95, 2006-01-15, Child sand toy set), (7, 24.95, 2005-1
27、2-20, White beach towel), (8, 32.95, 2005-12-22, Blue-striped beach towel), (9, 12.95, 2006-03-12, Flip-flop), (10, 34.95, 2006-01-24, Open-toed sandal) ;7 rows inserted/updated/deletedij exit ;在本例中,首先启动 ij 工具并连接数据库。下一代码行通过显式列出所有四列并为每行提供新值,将 7 行插入数据库中。如前所述,多行插入将每个新行的值包括在括号内,这些值之间用逗号分隔。该 SQL INSERT 语句执行之后,ij 工具报告这 7 新行已经插入。 在 Apache Derby 中插入数据多行插入优于多个单行插入;但更好的方法是将 SQL INSERT 语句放在脚本文件中,运行脚本来插入数据。这种方法允许您更容易地修复错误或根据需要重新插入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- UWB定位算法仿真开发课程设计
- 博物馆奇妙夜课程设计
- 磨床研发工程师考试试卷及答案
- 搜索引擎元宇宙引擎课程设计
- FPGA实现UART通信技巧课程设计
- 毛绒玩具充棉工岗位操作考试试卷及答案
- 2026年小学四个引路人要求学习课件
- ETC门架接地防腐蚀措施方案
- 幼儿园:颜色变变变
- 2026年中秋节假期高中假期错题计划
- 特殊建设工程消防验收申请表样表
- 第七章糖代谢与生物氧化
- 医院传染病防控
- 《养老机构服务合同》 GF-2016-2001
- 喷砂房安全规程
- 第六章 地理信息系统的应用模型
- 麻风病皮肤查菌技术课件
- 教育学 第四章 学生与教师
- 民航客舱服务与管理高职PPT完整全套教学课件
- 第二章教师专业发展的内容
- 运动人体科学《背诵篇》
评论
0/150
提交评论