|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的创立表
起首,我们在我们的示例数据库创立个中一张表COFFEES,包括在咖啡店所卖咖啡的需要的信息,包含咖啡名字,他们的代价,本礼拜卖了几磅及迄今为止卖的数量。关于COFFEES表我们今后会具体形貌,以下:
COF_NAMESUP_IDPRICESALESTOTAL
Colombian1017.9900
French_Roast498.9900
Espresso1509.9900
Colombian_Decaf1018.9900
French_Roast_Decaf499.9900
存储咖啡名的列是COF_NAME,它的SQL数据范例是VARCHAR,最年夜的长度为32个字符。由于我们所卖的每品种型咖啡都利用分歧的名字,名字可用于作为独一辨认咖啡的标识,因而可用于作主键。第二个列叫SUP_ID,用于保留咖啡供给商标识;其SQL数据范例为INTEGER。第3列叫PRICE,由于它必要保留带小数的十进制数,因而它的SQL范例为FLOAT。(注重,一般钱的SQL范例为DECIMAL或NUMERIC,但在分歧DBMSs间存在差别,为了不于老版本的JDBC的不兼容性在本教程我们接纳更尺度的FLOAT范例)SALES列的SQL范例为INTEGER,其值为本礼拜所卖咖啡的磅数。最初一列,TOTAL的SQL范例为INTEGER,保留了迄今为止所卖咖啡的总磅数。
数据库里的第二个表SUPPLIERS,保留了每一个供给商的信息:
SUP_IDSUP_NAMESTREETCITYSTATEZIP
101Acme,Inc.99MarketStreetGroundsvilleCA95199
49SuperiorCoffee1PartyPlaceMendocinoCA95460
150TheHighGround100CoffeeLaneMeadowsCA93966
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个字符:
CREATETABLECOFFEES
(COF_NAMEVARCHAR(32),
SUP_IDINTEGER,
PRICEFLOAT,
SALESINTEGER,
TOTALINTEGER)
这些代码不带DBMS语句停止符,由于每一个DBMS都大概分歧。比方,Oracle利用一个分号(;)作为语句的停止,而Sybase利用go。你所利用的驱动程序会主动供应符合的语句停止符,因而你不必把它包含在你的JDBC代码中。
别的,我们应当指出的的是SQL语句的格局。在CREATETABLE语句中,关头字接纳年夜写字符,而且每一个项目都另起一行。SQL并没有此请求;仅仅是为了更简单浏览。SQL尺度是不辨别关头词的巨细写的,因而,以下例中的SELECT语句能够有多种写法。因而上面两个分歧写法的语句对SQL来讲是一样的。
SELECTFirst_Name,Last_Name
FROMEmployees
WHERELast_NameLIKE"Washington"
selectFirst_Name,Last_NamefromEmployeeswhere
Last_Namelike"Washington"
但是,引号里的内容是辨别巨细写的:在名字"Washington"里"W"必需被年夜写,而且余下的字符必需是小写的。
关于标识,分歧的DBMS有分歧的请求,比方,某些DBMSs请求那些列名及表名必需跟创立时的一样,有些则没有此请求。为平安起见,我们全体利用年夜写标识如COFFEES、SUPPLIERS,由于我们是那样界说他们的。
到止我们写了创立COFFEES表的SQL语句。如今我们在它表面加上引号(使它成为字符串),而且字符串赋值给变量createTableCoffees,在今后的JDBC代码中我们可使用此变量。正如看到的,DBMS其实不在乎分行,但对Java言语来,String对象分行是通不外编译的。因此,我们能够用加号(+)把每行的串联接。
StringcreateTableCoffees="CREATETABLECOFFEES"+
"(COF_NAMEVARCHAR(32),SUP_IDINTEGER,PRICEFLOAT,"+
"SALESINTEGER,TOTALINTEGER)";
我们在CREATETABLE语句中利用的数据范例是通用的SQL范例(也称JDBC范例)它们在类java.sql.Types中界说。DBMSs一般利用这些尺度的范例,因而,当你要实验一些JDBC使用程序时,你能够间接利用CreateCoffees.java使用程序,它利用了CREATETABLE语句。假如你的DBMS利用了它的本人的当地的范例名字,我们为你供给别的的使用程序,我们将在前面具体注释。
在使用任何使用程序前,固然,我们将让你懂得JDBC的基本。
创立JDBCStatements对象
Statement对象用于把SQL语句发送到DBMS。你只须复杂地创立一个Statement对象而且然后实行它,利用得当的办法实行你发送的SQL语句。对SELECT语句来讲,可使用executeQuery。要创立或修正表的语句,利用的办法是executeUpdate。
必要一个活泼的毗连的来创立Statement对象的实例。鄙人面的例子中,我们利用我们的Connection对象con创立Statement对象stmt:
Statementstmt=con.createStatement();
到此stmt已存在了,但它还没有把SQL语句传送到DBMS。我们必要供应SQL语句作为参数供应给我们利用的Statement的办法。比方,鄙人面的代码段里,我们利用下面例子中的SQL语句作为executeUpdate的参数:
stmt.executeUpdate("CREATETABLECOFFEES"+
"(COF_NAMEVARCHAR(32),SUP_IDINTEGER,PRICEFLOAT,"+
"SALESINTEGER,TOTALINTEGER)");
由于我们已把SQL语句赋给了createTableCoffees变量,我们能够以下体例誊写代码:
stmt.executeUpdate(createTableCoffees);
实行语句
我们利用executeUpdate办法是由于在createTableCoffees中的SQL语句是DDL(数据界说言语)语句。创立表,改动表,删除表都是DDL语句的例子,要用executeUpdate办法来实行。你也能够从它的名字里看出,办法executeUpdate也被用于实行更新表SQL语句。实践上,相对创立表来讲,executeUpdate用于更新表的工夫更多,由于表只必要创立一次,但常常被更新。
被利用最多的实行SQL语句的办法是executeQuery。这个办法被用来实行SELECT语句,它几近是利用最多的SQL语句。即刻你将看到怎样利用这个办法。
在表中输出数据
我们已显现了怎样经由过程指定列名、数据范例来创立表COFFEES,可是这仅仅创建表的布局。表还没有任何数据。我们将次输出一行数据到表中,供应每列的信息,注重拔出的数据显现按次跟表创立时分是一样的,既缺省按次。
以下代码拔出一个行数据,COF_NAME的值为Colombian,SUP_ID为101,PRICE为7.99,SALES0,TOTAL0。就象创立COFFEES表一样,我们创立一Statement对象,并实行executeUpdate办法。
由于SQL语句一行显现不下,因而我们把它分为两行,并用加号(+)相连。出格要注重的是,在COFFEES和VALUES之间要有空格。这个空格必需在引号以内而且要在COFFEES跟VALUES之间;没有这个空格,SQL语句将被毛病地被读作为"INSERTINTOCOFFEESVALUES...",而且DBMS将寻觅表COFFEESVALUES。还要注重的是在coffeename上我们利用了单引号。
Statementstmt=con.createStatement();
stmt.executeUpdate(
"INSERTINTOCOFFEES"+
"VALUES(`Colombian`,101,7.99,0,0)");
上面的代码把第二行拔出到表COFFEES中。我们能够在利用Statement对象而不必为每次实行创立一个新的。
stmt.executeUpdate("INSERTINTOCOFFEES"+
"VALUES(`French_Roast`,49,8.99,0,0)");
剩下行的数据以下:
stmt.executeUpdate("INSERTINTOCOFFEES"+
"VALUES(`Espresso`,150,9.99,0,0)");
stmt.executeUpdate("INSERTINTOCOFFEES"+
"VALUES(`Colombian_Decaf`,101,8.99,0,0)");
stmt.executeUpdate("INSERTINTOCOFFEES"+
"VALUES(`French_Roast_Decaf`,49,9.99,0,0)");
从表中获得数据
既然表COFFEES中已无数据了,我们就能够写一个SELECT语句来获得这些值。上面的SQL语句中星号(*)暗示选择一切的列。由于没有效WHERE子句来限定所选的行,因而上面的SQL语句选择的是全部表。
SELECT*FROMCOFFEES
了局是全部表的数据,以下:
COF_NAMESUP_IDPRICESALESTOTAL
------------------------------------
Colombian1017.9900
French_Roast498.9900
Espresso1509.9900
Colombian_Decaf1018.9900
French_Roast_Decaf499.9900
假如你间接在数据库体系里输出SQL查询语句,你将在你的终端上看到如上的了局。当我们经由过程一个Java使用程序存取一个数据库时,正如我们即刻要做的一样,我们必要检索了局以便我们能利用他们。你将鄙人一节看到怎样完成。
这是SELECT语句的另外一个例子,这将失掉咖啡及其各自每磅单价的列表。
SELECTCOF_NAME,PRICEFROMCOFFEES
查询的了局集将具有以下情势:
COF_NAMEPRICE
-----------------------
Colombian7.99
French_Roast8.99
Espresso9.99
Colombian_Decaf8.99
French_Roast_Decaf9.99
下面SELECT语句获得了一切咖啡的名字及代价。而上面的SELECT语句限定那些每磅代价低于$9.00的咖啡才被选择。
SELECTCOF_NAME,PRICE
FROMCOFFEES
WHEREPRICE<9.00
了局集将具有以下情势:
COF_NAMEPRICE
--------------------
Colombian7.99
French_Roast8.99
ColombianDecaf8.99
j2EE和asp比较,其实也没什么比的,原因和我上面说那些比较差不了多少,也是稳定性,安全性,J2EE比asp高,速度上比不过asp,asp也是延续着它的拖拽控件的方法,提高速度。 |
|