NetBeans可视化Web开发之数据库应用开发

9章 数据库操作

本章学习目标:

l 掌握NetBeans中数据库应用开发的基本过程;

l 掌握NetBeans中数据库常用操作的实现。

主要内容:

l 创建应用需要的数据库表;

l 通过可视化界面显示数据库表中所有的信息;

l 在此基础上对这些信息进行修改和删除;

l 实现添加功能;

l 根据条件查询信息;

l 使用MySQL数据库作为应用数据库。

9.1 准备工作

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US"><font face="Times New Roman">9.1.1</font></span></chsdate>目标

使用NetBeans自带的数据库管理系统创建后续章节将要使用的数据库,数据库的名字为jsfdb,然后在该数据库中物品表goods,并添加测试数据。

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US"><font face="Times New Roman">9.1.2</font></span></chsdate>跟着我操作

1)创建数据库

主菜单中选择:【ToolsàJava DB DatabaseàCreate Database】。

在弹出的界面中,设置数据库的名字为“jsfdb”,用户名为“jsf”,口令为“jsf”,如图所示,然后点击【OK】。

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 261pt; HEIGHT: 123.75pt" type="#_x0000_t75"><imagedata o:title="创建数据库" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png"></imagedata></shape>

9.1 创建数据库

2)连接数据库

Service下面的Databases下面可以看到已经建立好的到数据库jsfdb的连接,连接的名字为:jdbc:derby://localhost:1527/jsfdb。在该连接上点击右键,可以通过【Properties】察看属性。要连接到这个数据库,在这个URL上点击右键,选择【Connect…】即可。如图所示:

<shape id="_x0000_i1026" style="WIDTH: 279.75pt; HEIGHT: 182.25pt" type="#_x0000_t75"><imagedata o:title="连接数据库" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.png"><font size="3"></font></imagedata></shape>

9.2 连接数据库

数据库连接之后,可以看到有3个字文件夹,分别是TablesViewsProcedures。现在全部为空。

3)创建数据表

可以通过两种方式创建表:可视化方法和命令行方式(写SQL语句)。

可视化创建表的过程:在“Tables”上面点击右键,然后选择【Create Table…】,然后在弹出的表设计界面中设计表,这个过程可以自行完成,不再介绍。

通过命令行的方式创建表:在“Tables”上点击右键,然后选择【Execute Command…】,

在右边的界面中输入创建表的语句:

create table goods

(

goodid varchar(10) primary key,

goodname varchar(20) not null,

price float

)

在下面的【output】窗口中显示执行成功。执行成功之后看不到创建的表,需要在“Tables”上点击右键,选择【Refresh】,就可以看到创建的表。如图所示:

<shape id="_x0000_i1027" style="WIDTH: 307.5pt; HEIGHT: 230.25pt" type="#_x0000_t75"><imagedata o:title="创建表" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.png"><font size="3"></font></imagedata></shape>

9.3 创建表

4)插入测试数据

在命令行窗口中继续执行下面的SQL语句:

insert into goods values('0011002200','洗衣粉',18);

insert into goods values('0011002201','香皂',3.5);

insert into goods values('0011003300','香油',10);

insert into goods values('0011003301','酱油',2.8);

insert into goods values('0011004400','花生',11);

insert into goods values('0011004401','瓜子',5);

insert into goods values('0011005500','面粉',23);

insert into goods values('0011005501','大米',17);

5)察看数据

在表GOODS上面点击右键,选择【View Data】,即可查看数据。

9.2 显示所有数据

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US">9.2.1</span></chsdate> 目标

把物品表中的信息显示在界面上。

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US">9.2.2</span></chsdate> 跟着我操作

1)创建工程

创建可视化Web应用,应用的名字为:dbtest

2)创建JSF页面

使用创建Web应用时候生成的JSF页面Page1.jsp作为显示信息的界面。

3)向页面添加组件

u 在页面的上方添加一个Label控件,然后输入“物品信息列表”。

u 在标签的下面添加Table控件。

4)连接到数据库

Runtime窗口中,选择配置好的要连接的数据库URL,展开这个连接,如果不能展开,说明还没有连接,先建立连接,可以参考前面介绍的连接数据库。

u 展开Databases节点;

u 展开Tables节点;

u 选择Goods表;

u 然后把表Goods表拖到表格上;

之后的界面如图所示:

<shape id="_x0000_i1028" style="WIDTH: 268.5pt; HEIGHT: 168pt" type="#_x0000_t75"><imagedata o:title="物品设计界面" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image007.png"><font size="3"></font></imagedata></shape>

9.4 物品信息列表设计界面

5)运行程序

在工程上点击右键,选择【Run】。这时候IDE会完成如下工作:

启动服务器;

把应用部署到服务器上;

启动浏览器,访问服务器上的应用。

运行效果如下:

<shape id="_x0000_i1029" style="WIDTH: 289.5pt; HEIGHT: 237.75pt" type="#_x0000_t75"><imagedata o:title="物品列表运行结果" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image009.png"></imagedata></shape>

9.5 运行结果

【试一下】点击表头的GOODIDGOODNAMEPRICE,看看有什么变化?

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US"><font face="Times New Roman">9.2.3</font></span></chsdate>告诉您为什么

1)在图4中的列表中abc123.0表示什么

在设计界面上,列表中会显示abc,这个abc表示显示的信息与一个String对象关联,在这种情况下,与SQL类型为varchar的数据库列对应。同样123.0表示显示的信息与一个Double对象关联。

2Table组件如何与数据库表关联

IDE为数据库表添加了一个不可见的组件goodsDataProvider组件,这个组件在Navigator窗口中可以看到。同时IDESessionBean1中添加了一个属性goodsRowSet

goodsRowSet属性保存了从数据库中得到的物品信息,连接数据库并封装数据的过程由IDE生成的代码完成,开发人员不需要关心,如果想修改查询结果,只要对SQL语句进行修改即可。在Navigator窗口中,选择SessionBean1下面的goodsRowSet,然后点击右键,在弹出式菜单中选择【Edit SQL Statement】,如图所示:

<shape id="_x0000_i1030" style="WIDTH: 192pt; HEIGHT: 228pt" type="#_x0000_t75"><imagedata o:title="修改SQL语句" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image011.png"></imagedata></shape>

9.6 选择编辑SQL语句

之后弹出如图所示的界面:

<shape id="_x0000_i1031" style="WIDTH: 327.75pt; HEIGHT: 228pt" type="#_x0000_t75"><imagedata o:title="编辑SQL语句" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image013.png"></imagedata></shape>

9.7 SQL编辑区

上面显示了表的结构,中间部分显示的是SQL语句的可视化设计界面,下面部分是SQL语句的代码编辑区。

goodsDataProvider是数据提供者,与SessionBean1中的goodsRowSet相关联,可以通过下面的方式查看。

navigator窗口中选择Page1下的GoodsDataProvider,然后在右边的属性窗口中可以查看GoodsDataProvider属性,如下图,cachedRowSet的值就是前面介绍的SessionBean1中的goodsRowSet

<shape id="_x0000_i1033" style="WIDTH: 163.5pt; HEIGHT: 111pt" type="#_x0000_t75"><imagedata o:title="数据提供者属性" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image015.png"><font size="3"></font></imagedata></shape>

9.8 数据提供者与行集的关联

Table组件与goodsDataProvider数据提供者关联。右键点击Table组件,在弹出式菜单中选择Bind to Data,会显示Bind to Data对话框,如下图所示:

<shape id="_x0000_i1034" style="WIDTH: 220.5pt; HEIGHT: 162pt" type="#_x0000_t75"><imagedata o:title="Bind to data对话框" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image017.png"><font size="3"></font></imagedata></shape>

9.9 数据绑定对话框

Table组件具体显示什么数据,可以在Table上点击右键,选择【Table Layout】,弹出如图所示界面:

<shape id="_x0000_i1035" style="WIDTH: 191.25pt; HEIGHT: 249pt" type="#_x0000_t75"><imagedata o:title="Tble Layout" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image019.png"></imagedata></shape>

9.10 Table Layout界面

可以通过AvailableSelected列表框中间的左右箭头选择要显示那些列的信息。如果希望修改某一列的相关属性,可以先在Selected列表框中选中该列,然后修改下面的属性。

3)系统如何访问数据库

在工程的Server Resources下面的sun-resources.xml中有连接池和数据源的配置代码:

<jdbc-resource enabled="true" jndi-name="jdbc/JSF_ApacheDerby" object-type="user" pool-name="derby_netPool"/>

<jdbc-connection-pool

allow-non-component-callers="false"

associate-with-thread="false"

connection-creation-retry-attempts="0"

connection-creation-retry-interval-in-seconds="10"

connection-leak-reclaim="false"

connection-leak-timeout-in-seconds="0"

connection-validation-method="auto-commit"

datasource-classname="org.apache.derby.jdbc.ClientDataSource"

fail-all-connections="false"

idle-timeout-in-seconds="300"

is-connection-validation-required="false"

is-isolation-level-guaranteed="true"

lazy-connection-association="false"

lazy-connection-enlistment="false"

match-connections="false"

max-connection-usage-count="0"

max-pool-size="32"

max-wait-time-in-millis="60000"

name="derby_netPool"

non-transactional-connections="false"

pool-resize-quantity="2"

res-type="javax.sql.DataSource"

statement-timeout-in-seconds="-1"

steady-pool-size="8"

validate-atmost-once-period-in-seconds="0"

wrap-jdbc-objects="false">

<property name="serverName" value="localhost"/>

<property name="PortNumber" value="1527"/>

<property name="DatabaseName" value="jsfdb"/>

<property name="User" value="jsf"/>

<property name="Password" value="jsf"/>

</jdbc-connection-pool>

在工程的web.xml中有如下的代码:

<resource-ref>

<description>Creator generated DataSource Reference</description>

<res-ref-name>jdbc/JSF_ApacheDerby</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

goodsRowSet对象访问上面的数据源。在SessinBean1中,会看到_init方法中有如下的代码:

goodsRowSet.setDataSourceName("java:comp/env/jdbc/JSF_ApacheDerby");

goodsRowSet.setCommand("SELECT * FROM JSF.GOODS");

goodsRowSet.setTableName("GOODS");

9.3 完成添加功能

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US"><font face="Times New Roman">9.3.1</font></span></chsdate>目标

本节的目标如下:

l 能够通过界面向数据库中添加信息;

l 能够通过界面修改数据库中的信息;

l 能够撤销这些修改。

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US"><font face="Times New Roman">9.3.2</font></span></chsdate>跟着我操作

1)编写界面

在界面上添加一个按钮,输入“添加物品”,当点击这个按钮的时候会在表格下面添加一行。

然后界面上再添加一个按钮,输入“保存修改”,当点击这个按钮的时候系统会保存修改后的信息。

2)修改Table中的元素

Table中原来显示信息使用静态文本,现在需要修改成输入框以便使用。

Table上点击右键,选择【Table Layout】,在弹出的界面上选择Selected列表框中的GOODS.GOODID,然后修改下面的Component Type属性后的下拉框,选择“Text Field”。

采用同样的方法修改另外两个属性。

3)创建虚拟表单

按住Ctrl键,选择表格中最上面的3个输入框。然后在任意输入框上右键点击,在弹出式菜单中选择【Configure Virtual Forms...】,出现下面的界面:

<shape id="_x0000_i1036" style="WIDTH: 291pt; HEIGHT: 173.25pt" type="#_x0000_t75"><imagedata o:title="配置虚拟表单" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image021.png"></imagedata></shape>

9.11 编辑虚拟表单

Name修改为“save”,选择ParticipateYes,然后点击【OK】即可。

4)为“添加物品”按钮添加动作

当点击“添加物品”按钮的时候,会在Table的下面添加一行。添加动作的过程如下:

点击“添加物品”按钮,IDE会打开源代码并生成button1_action方法;

修改方法如下(粗体为添加部分):

public String button1_action() {

try {

RowKey rk = goodsDataProvider.appendRow();

goodsDataProvider.setCursorRow(rk);

} catch (Exception ex) {

log("Error Description", ex);

error(ex.getMessage());

}

return null;

}

5)为“保存修改”按钮添加动作

当点击“保存修改”按钮的时候,会把用户的修改更新到数据库中。添加处理代码的过程如下:

点击“保存修改”按钮,IDE会打开源代码并生成button2_action方法;

修改方法代码如下(粗体为添加部分):

public String button2_action() {

try {

goodsDataProvider.commitChanges();

} catch (Exception ex) {

log("Error Description", ex);

error("Error :"+ex.getMessage());

}

return null;

}

6)运行测试
7)取消操作

l 在界面上添加一个按钮;

l 修改按钮的内容为“取消改变”;

l 把按钮的id属性修改为“cancle”;

l 双击该按钮,生成action事件;

l 为事件添加处理代码:

public String revert_action() {

form1.discardSubmittedValues("save");

try {

goodsDataProvider.refresh();

} catch (Exception ex) {

log("Error Description", ex);

error(ex.getMessage());

}

return null;

}

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US"><font face="Times New Roman">9.3.3</font></span></chsdate>告诉您为什么

1)修改功能是如何实现的

通过前面的介绍,修改功能的操作过程为:修改表格中的某一行,然后点击“保存修改”即可完成,该功能是如何实现的呢?

表格中的数据与goodsDataProvider关联,当修改表格中的数据之后,修改后的数据也会映射到goodsDataProvider

当点击“保存修改”的时候,调用了goodsDataProvidercommitChanges方法;

该方法能够调用goodsRowSet的相应方法完成对数据库中数据的更新。

2)添加功能是如何实现的

添加功能与修改功能的实现非常类似,只是需要先在表格中添加一行,通过下面的代码添加:

RowKey rk = goodsDataProvider.appendRow();

3)撤销功能是如何实现的

不管是添加功能还是修改功能,用户操作完之后,都需要通过goodsDataProvider对象的commitChanges方法完成提交。如果不提交,这些修改不会影响到goodsRowSet对象。

如果不想要这些修改,可以调用goodsDataProviderrefresh方法进行刷新,会从goodsRowSet中重新加载数据,这样用户在表格中所作的修改就撤销了。

9.4 完成删除功能

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US"><font face="Times New Roman">9.4.1</font></span></chsdate>目标

在信息列表界面中,当用户选择某个记录后面的删除按钮的时候,可以删除当前记录。

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US">9.4.2</span></chsdate> 跟着我操作

1)修改界面

首先在表格的每一行添加一个删除按钮,操作过程如下:

l Table上点击右键,选择Table Layout

l 点击New按钮添加一列;

l 选中该列;

l 修改该列的相关信息,如图12所示;

l 点击OK即可。

<shape id="_x0000_i1037" style="WIDTH: 192pt; HEIGHT: 249pt" type="#_x0000_t75"><imagedata o:title="添加删除按钮" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image023.png"><font size="3"></font></imagedata></shape>

9.12 为表格添加列

2)为删除按钮添加事件

双击表格中的删除按钮生成事件方法;

添加事件处理代码:

public String delete_action() {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值