javaBean 数据库操作

## 数据库的准备工作

安装Mysql4.0以上的数据库软件。从http://www.mysql.com 网站下载自动安装软件包和JDBC驱动。跟着自动安装向导可以非常容易的安装Mysql数据库软件。假设mysql安装在c:\mysql目录下。

把mysql数据库的JDBC驱动如mysql-connector-java-3.0.16-ga-bin.jar拷贝到Tomcat5.5的common\lib 目录下。

创建数据库结构，在c:\mysql\bin目录下，键入mysql命令进入控制台，接着使用CREATE DATABASE catalog建立数据库catalog，使用exit命令退出控制台，即执行下列语句：

c:\ mysql\bin> mysql

mysql> CREATE DATABASE catalog;

mysql> exit

创建SQL文件createProducts.sql，文件内容如下：

1. DROP TABLE IF EXISTS product;

2. CREATE TABLE product (id varchar(10) not null, description varchar(30), manuf varchar(30), price float);

3. INSERT INTO product VALUES

4. ('p001', 'Product 1', 'ABC Manufacturing Co.', 75.00);

5. INSERT INTO product VALUES

6. ('p002', 'Product 2', 'ABC Manufacturing Co.', 33.00);

7. INSERT INTO product VALUES

8. ('p003', 'Product 3', 'ABC Manufacturing Co.', 26.00);

9. INSERT INTO product VALUES

10. ('p004', 'Product 4', 'ABC Manufacturing Co.', 37.00);

11. INSERT INTO product VALUES

12. ('p005', 'Product 5', 'ABC Manufacturing Co.', 13.00);

13. INSERT INTO product VALUES

14. ('p006', 'Product 6', 'ABC Manufacturing Co.', 17.00);

15. INSERT INTO product VALUES

16. ('p007', 'Product 7', 'ABC Manufacturing Co.', 89.00);

17. INSERT INTO product VALUES

18. ('p008', 'Product 8', 'ABC Manufacturing Co.', 12.00);

19. INSERT INTO product VALUES

20. ('p009', 'Product 9', 'ABC Manufacturing Co.', 22.00);

21. INSERT INTO product VALUES

22. ('p010', 'Product 10', 'ABC Manufacturing Co.', 65.00);

23. INSERT INTO product VALUES

24. ('p011', 'Product 11', 'ABC Manufacturing Co.', 78.00);

25. INSERT INTO product VALUES

26. ('p012', 'Product 12', 'ABC Manufacturing Co.', 45.00);

27. INSERT INTO product VALUES

28. ('p013', 'Product 13', 'ABC Manufacturing Co.', 44.00);

29. INSERT INTO product VALUES

30. ('p014', 'Product 14', 'ABC Manufacturing Co.', 33.00);

31. INSERT INTO product VALUES

32. ('p015', 'Product 15', 'ABC Manufacturing Co.', 55.00);

33. INSERT INTO product VALUES

34. ('p016', 'Product 16', 'ABC Manufacturing Co.', 56.00);

35. INSERT INTO product VALUES

36. ('p017', 'Product 17', 'ABC Manufacturing Co.', 23.00);

37. INSERT INTO product VALUES

38. ('p018', 'Product 18', 'ABC Manufacturing Co.', 22.00);

39. INSERT INTO product VALUES

40. ('p019', 'Product 19', 'ABC Manufacturing Co.', 78.00);

41. INSERT INTO product VALUES

42. ('p020', 'Product 20', 'ABC Manufacturing Co.', 34.00);

43. INSERT INTO product VALUES

44. ('p021', 'Product 21', 'ABC Manufacturing Co.', 14.00);

45. INSERT INTO product VALUES

46. ('p022', 'Product 22', 'ABC Manufacturing Co.', 21.00);

47. INSERT INTO product VALUES

48. ('p023', 'Product 23', 'ABC Manufacturing Co.', 89.00);

49. INSERT INTO product VALUES

50. ('p024', 'Product 24', 'ABC Manufacturing Co.', 99.00);

51. INSERT INTO product VALUES

52. ('p025', 'Product 25', 'ABC Manufacturing Co.', 39.00);

53. INSERT INTO product VALUES

54. ('p026', 'Product 26', 'ABC Manufacturing Co.', 24.00);

55. INSERT INTO product VALUES

56. ('p027', 'Product 27', 'ABC Manufacturing Co.', 28.00);

57. INSERT INTO product VALUES

58. ('p028', 'Product 28', 'ABC Manufacturing Co.', 81.00);

59. INSERT INTO product VALUES

60. ('p029', 'Product 29', 'ABC Manufacturing Co.', 36.00);

61. INSERT INTO product VALUES

62. ('p030', 'Product 30', 'ABC Manufacturing Co.', 28.00);

63. INSERT INTO product VALUES

64. ('p031', 'Product 31', 'ABC Manufacturing Co.', 90.00);

65. INSERT INTO product VALUES

66. ('p032', 'Product 32', 'ABC Manufacturing Co.', 30.00);

67. INSERT INTO product VALUES

68. ('p033', 'Product 33', 'ABC Manufacturing Co.', 25.00);

接着执行如下的命令，创建表product，并填充一些实验数据：

c:\mysql\bin> mysql catalog < createProducts.sql

JavaBean往往封装了程序的页面逻辑，它是可重用的组件。通过使用JavaBean，可以减少在JSP中脚本代码的使用,这样使得JSP易于维护，易于被非编程人员接受。

JavaBean体系结构是第-个全面地基于组件的标准模型之-。JavaBean是描述Java的

软件组件模型，有点类似于Microsoft的COM组件概念。JavaBean组件是Java类，这些类遵循一个接口格式， 以便于使方法命名、底层行为以及继承或实现的行为能够把类看做标准的JavaBeans组件进行构造。

JavaBeans具有以下特性：

可以实现代码的重复利用。

易维护性、易使用件、易编写性。

可以在支持Java的任何平台上工作，而不需要重新编译。

可以在内部、网内或者是网络之间进行传输。

可以以其他部件的模式进行工作。

JavaBean传统的应用在于可视化领域，如AWT(窗口抽象工具集)下的应用。现在， JavaBean更多的应用在于不可视化领域，它在服务器端应用方面表现出了越来越强的生命力。

不可视化的JavaBean和可视化的JavaBean同样使用属性和事件。不可视化的JavaBean在JSP程序中常用来封装事务逻辑、数据库操作等，可以很好地实现业务逻辑和前台程序的分离，使得系统具有更好的健壮性和灵活性。

## JavaBean的属性

属性是Bean组件内部状态的抽象表示，JavaBeans的属性可以分为以下四类：

Simple(简单的)：

Indexed(索引的)：

Bound(绑定的)：

Constrained(约束的)。

下面分别介绍这些属性的概念。

### 1．Simple(简单的)

一个简单属性表示一个伴随有get／set方法的变量，它依赖于标准命名约定来定义getXXX()方法和setXXX()方法；

它的使用语法如下:

public voidset<PropertyName>(<PropertyType>value)；

public <PropertType> get<PropertyName>()；

public boolean is<PropertyName>()：

对于Boolean类型的属性, 除了可以使用getXXX方法外，还可以使用isXXX方法来获得这个属性。

例如，对“userName”属性，假如这个属性的类型是String，我们可以采用下面的方法：

public void setUserName(String value)；

public String getUserName();

您可以设置的属性是读写、只读或者是只写。getXXX()方法和setXXX()方法可以使之具有读写属性;getXXX()方法将允许您只具有只读属性;setXXX()方法将允许您只具有只写属性。

具有简单的属性的JavaBean如例所示.

例：有简单的属性的JavaBean(ch5／WEB-INF／classes／SimpleBean．java)

1. package com．jspdev．ch5;

2. public class SimpleBean

3. {

4. //type为属性的名字，类型是String

5. private String type；

6. //boolean的debug属性

7. private boolean debug=false：

8. //getXXX方法，返回这个属性的值

9. public String getType()

10. {

11. return this．type；

12. }

13. ／／setXXX方法，设置这个属性的值

14. public void setTyPe(String type)

15. {

16. this．type=type；

17.

18. }

19. ／／对于Boolean类型的属性， 可以使用isXXX方法来获得属性

20. public boolean isDebug()

21. {

22. return this．debug；

23. }

24. ／／设置Boolean类型的属性。

25. public void setDebug(boolean debug)

26. {

27. this．debug=debug；

28. }

29. }

在上面的代码中，由于debug的类型是Boolean，那么可以使用isDebug方法来获得这个属性。在这里isDebug和getDebug方法是一样的，它们之间可以进行内部转换。

### 2．Indexed(索引的)

一个Indexed索引属性表示一个数组值，同上所述的Simple简单属性一样，可以使用get/set方法取得数组中的值。

它的使用语法如下：

public void set<PropertyName>(int index，<PropertyType> value);

public void set<PropertyName>(<PropenyType[]> value)；

public <PropertyType[]> get<PropertyName>()；

public <PropertyType> get<PropertyName>(int index)；

例子是使用索引的属性的例子。

例：使用索引的属性的JavaBean(ch5／WEB-INF／classes／IndexBean．iava)

1. package com.jspdev．ch5；

2. public class IndexBean

3. {

4. ／／type为属性的名字，类型是String

5. private String[]type=new String[]{"jsp"，"ejb","servlet","javamail","jca"，"jdbc")：

6. ／／getXXX方法，返回这个属性的值

7. publicStringllgetType()

8. {

9. returnthis．type；

10. }

11. ／／setXXX方法，设置这个属性的值

12.

13. public void setType(String[]type)

14. {

15. this．type=type：

16. }

17. ／／另外的设置属性和获得属性值的方法

18. public void setType(int index,String value)

19. {

20. type[index]=value：

21. }

22. public String getType(int index)

23. {

24. return type[index]：

25. }

26. }

有了以上的Bean，我们就可以这样使用它了：

setType(4,"JavaBean")；

String type=getType(5)；

String[] s=getType()；

### 3．Bound(绑定的)

绑定属性提供一种机制，即通知监听器一个JavaBean组件的属性发生了改变。监听器实现了PropertyChangeListener接口并接收由JavaBean组件产生的PropertyChangeEvent对象，PropertyChangeEvent对象包括一个属性名字、旧的属性值，以及每-个监听器可能要访问的新属性值。

JavaBean实现了addPropertyChangeListener()和removePropertyChangeListener()方法，以便加入和删除属性变化监听器。PropertyChangeSupport．firePropertyChange()方法可以被使用，并传递属性名、旧值以及新值等信息。

这些属性在JavaBean图形编程中大量使用，我们的目的是怎么在JSP中使用JavaBean，故不详细介绍了。

### 4．Constrained(约束的)

约束属性和绑定属性类似，但是属性值的变化首先要被所有的监听器验证之后，值的变化才能由JavaBean组件发生作用。一个JavaBean的约束属性是指当这个属性的值要发生变化时，与这个属性已经建立厂某种连接的其他Java对象可否决属性值的改变。任何一个监听器都可以否决属性变化，JavaBean组件同意不使属性变化才能生效。

监听器实现了VetoableChangeListener接口，并接收由JavaBean组件产生的PropertyChangeEvent对象。JavaBean组件可以使用VetoableChangeSupport辅助程序类激活由监听器接收的实际事件。

使用一个JavaBean组件实例的引用来构造VetoableChangeSupport对象，JavaBean实现了用addVetoableChangeListerO方法和removeVetoableChangeLister()方法来加入或者删除可否决属性变化监听器。VetoableChangeSupport．fireVetoableChange()方法可以用来传递属性的名字、旧属性值和新的属性值等信息。

和绑定的属性一样，这里只介绍它的概念，在JSP开发中很少使用到这种属性。

## javaBean的方法

JavaBean的方法的编写和其他Java程序的方法一样容易编写，也就是说，它们两者是一样的。举一个简单的例子：

public void printMessage()

{

System．out．println("type is:"+tyPe)；

System．out．println("debug is："+debug)；

}

这就是一个JavaBean的方法，它只是标准的Java代码。