`
xiao_yi
  • 浏览: 405397 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

创建表

首先,我们创建一张例中用到的表。COFFEES表包含了Coffee Break出售咖啡的基本信息:咖啡名称、价格、本周销售量(磅)及迄今销售量(磅)。COFFEES表的内容如下,后面会更加详细地描述。

COF_NAME SUP_ID PRICE SALES TOTAL
Colombian 101 7.99 0 0
French_Roast 49 8.99 0 0
Espresso 150 9.99 0 0
Colombian_Decaf 101 8.99 0 0
French_Roast_Decaf 49 9.99 0 0

存储咖啡名称的列是COF_NAME,可保存最大长度为32个字符的VARCHAR SQL类型数值。由于销售的每种咖啡使用不同名称,因此它可作为主键,惟一标识一种特定咖啡。第二列(SUP_ID)保存一个数字,标识咖啡供应商;这个数字是INTEGER SQL类型。第三列(PRICE)存储FLOAT SQL类型的数值,因为它需要保存带有小数点的数值(注意,货币一般存储在DECIMAL或NUMERIC SQL类型中,但是因为各DBMS间有区别,为避免与较老版本的JDBC不兼容,所以本教程使用更加标准的FLOAT类型)。SALES这一列存储INTEGER SQL类型,表示本周销售量(磅)。最后一列(TOTAL)包含SQL INTEGER类型,表示迄今销售量(磅)。

数据库的第二张表SUPPLIERS给出了各个供应商的信息:

SUP_ID SUP_NAME STREET CITY STATE ZIP
101 Acme, Inc. 99 Market Street Groundsville CA 95199
49 Superior Coffee 1 Party Place Mendocino CA 95460
150 The High Ground 100 Coffee Lane Meadows CA 93966

COFFEES表和SUPPLIERS表都包含SUP_ID列,表明可在SELECT语句中关联这两张表的信息以检索数据。SUP_ID列是SUPPLIERS表的主键,它惟一标识了每个供应商。在COFFEES表中,SUP_ID称为外键(就其是从另一张表引入的而言,外键可认为是外来的)。每个SUP_ID在SUPPLIERS表中只出现一次,因为它是主键。但在COFFEES表中,它却是一个外键,完全有可能出现重复的SUP_ID,因为一个供应商可能销售多种咖啡。本讲后面会例示如何在SELECT语句中使用主键和外键。

下面SQL语句创建了COFFEES表。外括号内的项由列名后跟空格和该列要存储的SQL类型组成。逗号将各个列项(由列名和SQL类型组成)隔开。创建VARCHAR类型时要指定最大长度,因此它带有一个指出最大长度的参数。参数要放在类型后面的括号中。例如,下面的SQL语句指出COF_NAME列中的名称最多只有32个字符:

CREATE TABLE COFFEES
	(COF_NAME VARCHAR(32),
 SUP_ID INTEGER,
 PRICE FLOAT,
 SALES INTEGER,
 TOTAL INTEGER)

这段代码没有DBMS语句结束符,各种DBMS的语句结束符各不相同。例如,Oracle用分号指出语句结束,Sybase用单词go结束语句。驱动程序会自动提供适当的语句结束符,您不必在JDBC代码中包含它们。

关于SQL语句另外应该指出的一点是它的形式。在CREATE TABLE语句中,关键字都以大写字母输入,每项占一行。SQL不要求这样,这些规定只是让语句易于阅读。SQL的标准是关键字不区分大小写,因此下面的语句可以用各种形式编写。就SQL而言,如下两个版本是等价的:

SELECT First_Name, Last_Name
FROM Employees
WHERE Last_Name LIKE "Washington"
select First_Name, Last_Name from Employees where
Last_Name like "Washington"

但引号内的字符区分大小写:在名称“Washington”中,“W”必须大写,其余字母必须小写。

在标识符名称使用上,DBMS间要求可能不一样。如有些DBMS要求给出的列名和表名与在CREATE TABLE语句中创建时的名称完全相同,而另一些DBMS则无此要求。为安全起见,这里标识符(如COFFEES和SUPPLIERS)都用大写,因为定义时就是用大写。

至此创建表COFFEES的SQL语句已写完。现在将它用引号引起来(使之成为字串),然后赋予变量createTableCoffees,以在后面JDBC代码中使用该变量。如刚才所示,DBMS不关心分行位置,但在Java编程语言中,超过一行的String对象将不能编译。因此,当使用字串时,要将每行放在引号中,再用一个加号(+)将其连接起来:

String createTableCoffees = "CREATE TABLE COFFEES " +
    "(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " +
    "SALES INTEGER, TOTAL INTEGER)";

CREATE TABLE语句中使用的数据类型是类java.sql.Types中定义的通用SQL类型(亦称JDBC类型)。DBMS一般使用这些标准数据类型,因此要试验一些JDBC应用程序时,就可以使用包含CREATE TABLE语句的CreateCoffees.java应用程序。如果您的DBMS使用自己的局部类型名称,我们会为您提供另一应用程序(后面有完整解释)。

在运行程序前,我们还是先来学习一下JDBC的基础知识。

创建JDBC语句

Statement对象可将SQL语句发送到DBMS。这只要创建一个Statement对象,将想要执行的SQL语句传递给适当的执行方法,然后执行该Statement对象。对于SELECT语句,使用的方法是executeQuery。对于创建或修改表的语句,使用的方法是executeUpdate。

Statement对象是用活动连接实例创建的。下面的例子使用Connection对象con来创建Stetement对象stmt:

Statement stmt = con.createStatement();

至此stmt对象已存在,但它没有要在DBMS上执行的SQL语句。您需供应用于执行stmt的方法。下面代码段中将上例的SQL语句传递给executeUpdate:

stmt.executeUpdate("CREATE TABLE COFFEES " +
    "(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " +
    "SALES INTEGER, TOTAL INTEGER)");

由于SQL语句已转成字符串并赋给了变量createTableCoffees,因此可用如下代码替换:

stmt.executeUpdate(createTableCoffees);

执行语句

这里使用executeUpdate方法,因为createTableCoffees中的SQL语句是一条DDL(数据描述语言)语句。创建、修改或删除表的语句都是DDL语句,要用executeUpdate方法执行。顾名思义,executeUpdate方法也执行更新表的SQL语句。在实际应用中,executeUpdate方法常用于更新表,而不是创建表,因为表只创建一次,但可能多次更新。

执行SQL语句最常用的方法是executeQuery。这个方法用于执行涵盖了大多数SQL语句的SELECT语句。您马上会看到这种方法的使用。

在表中插入数据

我们已经例示了通过指定列名及其数据类型创建COFFEES表,但这只是创建表结构。表中还没有任何数据。通过提供行中要存储的列信息,就可在表中每次添加一行数据。但插入到列中的数值要与创建表时声明的列顺序(默认顺序)一致。

下面代码插入了一行数据:COF_NAME列的值是Colombian,SUP_ID列是101,PRICE列是7.99,SALES列是0,TOTAL列是0(由于Coffee Break刚开张,所有咖啡才开始销售,所以本周销售量和迄今销售量都为0)。如同创建COFFEESS表的代码所做的一样,我们将创建一个Statement对象,然后用executeUpdate方法执行它。

因为SQL语句在页面的一行中放不下,所以要把它分成两个字符串,再用加号(+)将它连起来,使得它可以编译。特别要注意的是,需要在COFFEES和VALUES间加一个空格。这个空格必须放在引号内,可位于COFFEES之后或VALUES之前;没有这个空格,SQL语句将错误认为是“ INSERT INTO COFFEESVALUES . . .”,接着DBMS将查找COFFEESVALUES表。还要注意在咖啡名上用单引号,因为它嵌套在双引号中。对于多数DBMS,一般规则是切换双引号和单引号以指明嵌套。

Statement stmt = con.createStatement();
stmt.executeUpdate(
    "INSERT INTO COFFEES " + 
    "VALUES ('Colombian', 101, 7.99, 0, 0)");

下面代码在COFFEES表中插入第二行数据。您不必为每次执行创建新的Statement对象,完全可以重用Statement对象stmt。

stmt.executeUpdate("INSERT INTO COFFEES " +
    "VALUES ('French_Roast', 49, 8.99, 0, 0)");

插入的其他行数据如下:

stmt.executeUpdate("INSERT INTO COFFEES " +
    "VALUES ('Espresso', 150, 9.99, 0, 0)");
stmt.executeUpdate("INSERT INTO COFFEES " +
    "VALUES ('Colombian_Decaf', 101, 8.99, 0, 0)");
stmt.executeUpdate("INSERT INTO COFFEES " +
    "VALUES ('French_Roast_Decaf', 49, 9.99, 0, 0)");

从表中取数据

既然COFFEES表中有了数据,您就可以编写SELECT语句访问这些数据了。下面SQL语句中的星号(*)指出所有的列都应该选出。由于没有WHERE语句限制要选出的行,所以下面的SQL语句将检出整张表:

SELECT * FROM COFFEES

执行结果是检出整张表,如下所示:

COF_NAME		SUP_ID	PRICE	SALES	TOTAL
---------------		------	-----	-----	-----
Colombian		101	7.99	0	0
French_Roast		 49	8.99	0	0
Espresso		150	9.99	0	0
Colombian_Decaf		101	8.99	0	0
French_Roast_Decaf	 49	9.99	0	0

如果直接在数据库系统中输入上面的SQL查询,就可在屏幕上看到上面的结果。Java应用程序访问数据库时要先检出数据以便使用。下一节会看到如何实现。

下面是另一条SELECT语句;这条语句将检出咖啡价格表(每磅):

SELECT COF_NAME, PRICE FROM COFFEES

这个查询的结果如下:

 
COF_NAME				PRICE
--------		----------   	-----
Colombian				7.99
French_Roast				8.99
Espresso				9.99
Colombian_Decaf	  			8.99
French_Roast_Decaf			9.99

上面SELECT语句列出所有咖啡的名称及价格。下面的SQL语句将列出每磅单价小于$9.00的咖啡:

 
SELECT COF_NAME, PRICE
FROM COFFEES
WHERE PRICE < 9.00

执行结果如下:

 
COF_NAME				PRICE
--------		-------		-----
Colombian				7.99
French_Roast				8.99
Colombian Decaf	 	 		8.99
 
分享到:
评论

相关推荐

    jdbc详解(基础版本)

    ### JDBC详解(基础版本) #### 一、JDBC概述 **1.1 什么是JDBC?** JDBC(Java Database Connectivity)是Java平台上的数据库访问技术。简而言之,它是Java语言与各种数据库进行交互的桥梁。通过JDBC,开发者...

    jdbc基础知识总结

    ### JDBC基础知识总结 #### 一、概述 JDBC(Java Database Connectivity)是一种标准的Java API,用于连接并操作各种类型的数据库。它从物理结构上说就是一套Java语言访问数据库的接口集合,本质上则是调用者...

    JDBC基础教程之ResultSet对象.doc )

    ### JDBC基础教程之ResultSet对象详解 #### 一、ResultSet对象概览 `ResultSet`对象是Java Database Connectivity (JDBC) API中的一个核心组件,用于处理SQL查询结果。它充当了一个临时的数据存储,其中包含了所有...

    jsp基础JDBC小项目

    二、JDBC基础 1. 驱动加载:JDBC操作的第一步是加载数据库驱动,通过Class.forName()方法指定驱动类名,如"com.mysql.jdbc.Driver"。 2. 数据库连接:使用DriverManager.getConnection()方法建立到数据库的连接,...

    自学jdbc心得体会

    二、JDBC的API * java.sql包和javax.sql包 * Driver接口(驱动):在加载某一Driver类时,它应该创建自己的实例并向DriverManager注册该实例。 * DriverManager类(驱动管理器):可以创建连接,它本身就是一个创建...

    JDBC基础教程之概述.txt

    ### JDBC基础教程之概述 #### 一、JDBC简介与概念理解 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC的...

    JSP JDBC 学习笔记(基础)

    ### JDBC基础 1. **JDBC简介**:JDBC是Java API,用于与各种数据库进行连接,执行SQL语句并处理结果。它提供了一套统一的接口,使得开发者无需关心底层数据库的细节。 2. **JDBC驱动**:根据不同的数据库系统,...

    JDBC基础教程之连接.doc

    ### JDBC基础教程之连接知识点详解 #### 一、Connection对象及其作用 - **Connection对象**:在JDBC中,`Connection`对象代表了一个与数据库之间的连接。通过这个连接,应用程序可以执行SQL语句并获取结果集。 - *...

    JDBC 4.3规范文档

    总之,JDBC规范文档是了解Java数据库编程的基础,无论是数据库开发者、还是应用程序开发者,都需要对其规范有深入的理解。通过遵循JDBC规范,开发者可以编写出能够在多种数据库系统中移植的代码,同时确保代码的可...

    JDBC 入门电子书.zip

    **JDBC 入门知识详解** ...综上所述,JDBC是Java与数据库交互的基础,理解其工作原理和最佳实践对于任何Java开发者来说都至关重要。通过深入学习,我们可以更有效地构建健壮且高效的数据库应用程序。

    JDBC基础-Java学习笔记

    ### JDBC基础知识点详解 #### 一、JDBC概述 **JDBC** (Java Database Connectivity) 是 Java 开发者用来访问数据库的重要技术之一。它提供了一组标准的接口和类,使得开发者可以使用 Java 语言来编写数据库应用...

    jdbc资料jdbc资料jdbc资料pdf

    - `java.sql`包含基础的JDBC类和接口,如`Connection`, `Statement`, `ResultSet`等。 - `javax.sql`包含高级功能,例如`DataSource`等。 - **`DriverManager`类**: - **作用**:用于创建与数据库的连接。 - *...

    JDBC基础教程之驱动设置.doc

    ### JDBC基础教程之驱动设置详解 #### 一、概述与DriverManager的作用 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和...

    JDBC基础教程之PreparedStatement.doc

    ### JDBC基础教程之PreparedStatement知识点详解 #### 一、概述 `PreparedStatement`是Java数据库连接(JDBC)API中的一种重要接口,它继承自`Statement`接口,并在其基础上进行了扩展和优化。`PreparedStatement`...

    jdbc 课件.doc

    **JDBC基础应用详解** **一、JDBC概述** JDBC(Java Database Connectivity)是Java语言与各种数据库之间通信的标准接口,由Sun Microsystems公司开发并引入Java平台,它允许Java程序通过标准API来访问和操作...

    oracle 基础教程 jdbc 以及样式demo 各种数据库的连接方法

    一、JDBC基础 1. JDBC驱动管理:在Java程序中,我们需要加载对应的JDBC驱动来建立与Oracle数据库的连接。Oracle提供了四种类型的JDBC驱动,从早期的JDBC-ODBC桥接驱动到现代的 thin 驱动,每种都有其特定的应用场景...

Global site tag (gtag.js) - Google Analytics