搜索
首页数据库mysql教程NetBeans下构建操作数据库行的Web应用程序(二)

本教程介绍了如何使用具备 Web 功能的 NetBeans IDE 构建一个可以创建、检索、更新和删除数据库行的 Web 应用程序。该应用程序提供一个主数据的下拉列表以及一个同步的详细信息表。该 应用程序的用户可以在详细信息表及其关联数据库中添加、更新和删除记录。

本教程介绍了如何使用具备Web功能的NetBeans IDE构建一个可以创建、检索、更新和删除数据库行的Web应用程序。该应用程序提供一个主数据的下拉列表以及一个同步的详细信息表。该 应用程序的用户可以在详细信息表及其关联数据库中添加、更新和删除记录。

本教程使用了其他基础教程中介绍的一些概念。如果您不具备 IDE 及其设计组件的基本知识,可以考虑首先阅读一些入门教程,比如Visual Web JSF应用程序开发入门使用Databound组件访问数据库

测试应用程序:第1部分

单击主工具栏上的Run Main Projec 按钮  以生成、部署和运行项目。当Web浏览器呈现此页面时,您会看到一些名字填充了下拉列表,并且表也由一些数据进行了填充。当您从列表中选择某个名字时,与该名字相关的旅程就会显示在表格中。

添加插入功能

在此部分,我们将通过在数据库中插入行集,实现将行程添加到表中的功能。首先,为TableText Field提供Message组件。这些组件可确保当用户输入错误信息时可以看见错误。然后,在页面中添加一个按钮,以便用户可以通过它将新行添加到数据缓冲区中。

1.   单击Design按钮以便在Visual Designer中查看Page1

2.   PaletteBasic区域中,将Message组件分别拖放到Table的前三列每列的最顶层Text Field中。

3.   选择第一个Message组件。在Properties窗口中,滚动至<span>for</span>属性,并从下拉列表中选择<span>textField1</span>选项。只有当MessageText Field正确关联时,Message文本才会显示关联信息,如图11所示。

4.   将第二个Message组件的<span>for</span>属性设置为<span>textField2</span>

5.  将第三个Message组件的<span>for</span>属性设置为<span>textField3</span> 

6.   PaletteBasic区域,将一个Button组件拖到Page1中并将其放在靠近第二列顶端的Table组件的上面,如图12所示。

特别注意:IE7中有一个影响JSF 1.2 Button组件宽度的已知问题。解决方法是将Button组件放在布局组件(Grid PanelGroup Panel Layout Panel)的上面。重设布局组件的大小会自动重设Button组件的大小。

7.   将文本从<span>Button</span>更改为<span>Add</span> <span>Trip</span>

8.   Properties窗口中,将按钮的<span>id</span>属性更改为<span>add</span>

9.   Visual Designer中,双击按钮以打开Java Editor,插入点将位于该按钮的<span>add_action</span>事件处理程序方法中。

10.将下面以粗体显示的代码添加到该按钮的事件处理程序方法中:

代码示例 3:添加行程操作的代码

<span><font face="宋体">public String add_action() {<strong><p></p></strong></font></span>
<span><font face="宋体"><span>        </span>try {<p></p></font></span>
<span><font face="宋体"><span>            </span>RowKey rk = tripDataProvider.appendRow();<p></p></font></span>
<span><font face="宋体"><span>            </span>tripDataProvider.setCursorRow(rk);<p></p></font></span>
<span><font face="宋体"><span>            </span>tripDataProvider.setValue("TRIP.TRIPID", new Integer(0));<p></p></font></span>
<span><font face="宋体"><span>            </span>tripDataProvider.setValue("TRIP.PERSONID", personDD.getSelected());<p></p></font></span>
<span><font face="宋体"><span>            </span>tripDataProvider.setValue("TRIP.TRIPTYPEID", new Integer(1));<p></p></font></span>
<span><font face="宋体"><span>        </span>} catch (Exception ex) {<p></p></font></span>
<span><font face="宋体"><span>            </span>log("Error Description", ex);<p></p></font></span>
<span><font face="宋体"><span>            </span>error(ex.getMessage());<p></p></font></span>
<span><font face="宋体"><span>        </span>}<p></p></font></span>
<span><font face="宋体"><span>        </span>return null;<p></p></font></span>
<span><font face="宋体"><span>    </span>}<p></p></font></span>

11.Java编辑器中单击鼠标右键,然后选择Fix Imports选项以解决未找到 <span>RowKey</span>的错误。

        IDE会将下包添加到导入语句的<span>Page1.java</span>段:

<span><font face="宋体"><span>        </span>import com.sun.data.provider.RowKey;</font></span>

 

测试应用程序:第2部分

通过单击Run Main Project按钮  以生成、部署和运行项目。当Web浏览器呈现此页面时,将显示Add Trip按钮,如下图所示。每次单击该按钮时,都会在表的底部附加一个新的空行。可以编辑行中的信息,但由于尚未提供行集的保存机制,因此,从下拉列表中选择其他名字时,所做的更改将会丢失。

修改页面以保存行集

在此部分,将添加第二个行集到项目中。该行集用于计算已使用的最大行程ID

1.   单击编辑器窗口中的Design以返回Visual Designer中的Page1

2.  打开Services窗口,选择Databases > Travel > Tables > TRIP表,将其拖动到Navigator窗口中的SessionBean1节点上。

3.   该操作将为SessionBean1创建两个新子节点:tripDataProvidertripRowSet1

4.  Add New Data Provider对话框中,选择Create SessionBean1/tripRowSet1单选按钮,将数据提供程序名称更改为<span>maxTripRowSet</span>,然后单击OK按钮。

注意: 行集在对话框中出现了两次。这是一个已知问题,请予以忽略。这不会影响本教程中的应用程序。
此操作将在SessionBean1中创建maxTripDataProvidermaxTripRowSet

5.   Navigator窗口中,双击SessionBean1 > maxTripRowSet以打开Query Editor。在Source Code窗格(从顶部开始第三个)中单击鼠标左键。删除此处现有的SQL查询,然后输入以下查询:

<span><font face="宋体"><span> </span><span>       </span>SELECT MAX(TRAVEL.TRIP.TRIPID)+1 AS MAXTRIPID FROM TRAVEL.TRIP<p></p></font></span>

        您将会使用Save按钮(下一步您将会添加)的操作处理器中的<span>MAXTRIPID</span>值。

6.  关闭Query Editor

    注意: Query Editor的图形化编辑器不支持此查询。如果您看见一个警告对话框提示语法错误,您可以单击Continue按钮忽略它。

将用户更改保存到数据库

1.   在靠近第一列顶部的Table组件上放置一个Button组件。为了准确定位

2.   将按钮文本从<span>Button</span>更改为<span>Save</span> <span>Changes</span>

3.   Properties窗口中,将<span>id</span>属性更改为<span>save</span>

4.   右键单击Save Changes按钮,并从弹出菜单中选择Configure Virtual Forms选项。

5.   Configure Virtual Forms对话框中,请确保<span>save</span>显示在左上角的列表中,这样您在此窗口中的更改可以应用到Save Changes按钮中。然后,选择<span>save</span>虚拟表单,将Submit值更改为Yes,并单击OK按钮。

6.   Visual Designer中,双击Save Changes按钮以打开Java Editor。在Java Editor中,插入点将位于该按钮的<span>save_action</span>事件处理程序方法中。

7.  将下面以粗体显示的代码添加到该按钮的事件处理程序方法中:

代码示例 4:保存操作代码

<span><font face="宋体"><span>    </span>public String save_action() {<p></p></font></span>
<span><font face="宋体"><span>        </span><strong>try {<p></p></strong></font></span>
<span><font face="宋体"><span>            </span>// Get the next key, using result of query on MaxTrip data provider<p></p></font></span>
<span><font face="宋体"><span>            </span>CachedRowSetDataProvider maxTrip = getSessionBean1().getMaxTripDataProvider();<p></p></font></span>
<span><font face="宋体"><span>            </span>maxTrip.refresh();<p></p></font></span>
<span><font face="宋体"><span>            </span>maxTrip.cursorFirst();<p></p></font></span>
<span><font face="宋体"><span>            </span>int newTripId = ((Integer) maxTrip.getValue("MAXTRIPID"));<p></p></font></span>
<span><font face="宋体"><span>            </span>// Navigate through rows with data provider<p></p></font></span>
<span><font face="宋体"><span>            </span>if (tripDataProvider.getRowCount() > 0) {<p></p></font></span>
<span><font face="宋体"><span>                </span>tripDataProvider.cursorFirst();<p></p></font></span>
<span><font face="宋体"><span>                </span>do {<p></p></font></span>
<span><font face="宋体"><span>                    </span>if (tripDataProvider.getValue("TRIP.TRIPID").equals<p></p></font></span>
<span><font face="宋体"><span>                  </span><span>                        </span>(new Integer(0))) {<p></p></font></span>
<span><font face="宋体"><span>                        </span>tripDataProvider.setValue("TRIP.TRIPID",<p></p></font></span>
<span><font face="宋体"><span>                                            </span>new Integer(newTripId));<br>
<span>                        </span>newTripId++;<p></p></font></span>
<span><font face="宋体"><span>                    </span>}<br>
<span>                </span>} while (tripDataProvider.cursorNext());<br>
<span>            </span>}<br>
<span>            </span>tripDataProvider.commitChanges();<br>
<span>        </span>} catch (Exception ex) {<br>
<span>            </span>log("Error Description", ex);<br>
<span>            </span>error("Error :"+ex.getMessage());<br>
<span>        </span>}<br>
<span>        </span>return null;<br>
<span>    </span>}<p></p></font></span>

测试应用程序:第3部分

通过单击Run Main Project按钮以生成、部署和运行项目。应用程序将可以实现以下功能:

l          可以添加行程并进行保存。然后,该行程将显示在表中并持续存在。如果选择其他人员,然后返回到此人员,则会看到所添加的行程。

l          可以编辑现有的行程信息,并保存所做的更改。

l          如果在Date字段中输入除日期之外的内容,应用程序将提供一条错误消息。

l          在保存之前您可以多次单击Add Trip按钮,这是一次添加多行的简便方法。如果在保存更改时任何行仍然为空,则会将其保存为空行。

l          如果在单击Save Changes之前您切换到其他人员,则会丢失所有更新。

l          如果修改了某些值,然后单击某个列标题以按该列进行排序,则Table组件会记住这些暂挂的更改,随后可以保存这些更改。

添加删除功能

在此部分,我们将在表中添加删除功能。利用此功能,用户能够通过从数据库中删除某行来删除行程。在本教程中,Delete按钮的操作是即时的,并且从数据库中删除行时并不需要使用Save Changes按钮。实际上,由于Delete按钮的事件处理器使用<span>commitChanges</span>方法,它也会像Save Changes按钮一样保存所有待定的更改。

向每行添加一个Delete按钮

1.      单击编辑器窗口中的Design以返回Visual Designer中的Page1,然后右键单击Trips Summary表,并从弹出菜单中选择Table Layout选项。这将打开Table Layout对话框。

2.        如有必要,单击Columns选项卡,然后单击New按钮,将一个新列添加到表中。

3.      Selected列表中选择新列的名称后,在Column Details区域中进行以下更改:

a.        HeaderFooter Text删除 HeaderFooter文本字段中的任何默认文本,使其保持空白。

b.        Component type: <span>Button</span>

c.        Value Expression: <span>Delete</span>

d.        Width: 删除任何缺省值,使其保持空白。

e.        Horizontal Align: <span>Center</span>

f.         Vertical Align <span>Middle</span>

g.        单击OK按钮。

4.        选择表中最上面的Delete按钮,然后在Properties窗口中,将<span>id</span>属性设置为<span>delete</span>

添加事件代码

1.        双击Delete列中的第一个按钮,以在<span>delete_action</span>事件处理器方法中打开Java Editor

2.      将下面以粗体显示的代码添加到该按钮的事件处理程序方法中:

代码示例 5:删除操作代码

<span><font face="宋体"><span>    </span>public String delete_action() {<p></p></font></span>
<span><font face="宋体"><span>        </span>form1.discardSubmittedValues("save");<p></p></font></span>
<span><font face="宋体"><span>        </span>try {<p></p></font></span>
<span><font face="宋体"><span>            </span>RowKey rk = tableRowGroup1.getRowKey();<p></p></font></span>
<span><font face="宋体"><span>            </span>if (rk != null) {<p></p></font></span>
<span><font face="宋体"><span>                </span>tripDataProvider.removeRow(rk);<p></p></font></span>
<span><font face="宋体"><span>                </span>tripDataProvider.commitChanges();<p></p></font></span>
<span><font face="宋体"><span>                </span>tripDataProvider.refresh();}<p></p></font></span>
<span><font face="宋体"><span>        </span>} catch (Exception ex) {<p></p></font></span>
<span><font face="宋体"><span>            </span>log("ErrorDescription", ex);<p></p></font></span>
<span><font face="宋体"><span>            </span>error(ex.getMessage());<p></p></font></span>
<span><font face="宋体"><span>        </span>}<p></p></font></span>
<span><font face="宋体"><span>        </span>return null;<p></p></font></span>
<span><font face="宋体"><span>    </span>}<p></p></font></span>

测试应用程序:第4部分

通过单击Run Main Project按钮以生成、部署和运行项目。下图显示了该运行应用程序。

部署后,您应该可以从表中删除行,进而将其从数据库中删除。删除操作还会将所有待定更改提交到数据库。

 

添加恢复功能

现在,将恢复功能添加到页面中。使用此功能,用户将可以放弃其编辑并恢复为以前保存的数据。注意:恢复功能不能恢复已保存或删除的行;Save ChangesDelete 按钮会将更改提交到数据库。

添加Revert Changes按钮

1.        单击编辑器窗口中的Design以返回到Visual Designer中的Page1,然后从Palette中拖一个Button组件到Page1。将该新Button放在Add Trip按钮的右侧。

2.        将按钮文本更改为<span><font face="宋体">Revert</font></span> <span>Changes</span>

3.        Properties窗口中,将该Button组件的<span>id</span>属性更改为<span>revert</span>

4.        双击Revert Changes按钮以在<span>revert_action</span>方法中打开Java Editor

5.        将下面代码样例中以粗体显示的代码添加到<span>revert_action</span>方法中。

代码示例 6:恢复操作代码

<span><font face="宋体"><span> </span>public String revert_action() {<p></p></font></span>
<span><font face="宋体"><span>        </span>form1.discardSubmittedValues("save");<p></p></font></span>
<span><font face="宋体"><span>        </span>try {<p></p></font></span>
<span><font face="宋体"><span>            </span>tripDataProvider.refresh();<p></p></font></span>
<span><font face="宋体"><span>        </span>} catch (Exception ex) {<p></p></font></span>
<span><font face="宋体"><span>            </span>log("Error Description", ex);<p></p></font></span>
<span><font face="宋体"><span>            </span>error(ex.getMessage());<p></p></font></span>
<span><font face="宋体"><span>        </span>}<p></p></font></span>
<span><font face="宋体"><span>         </span>return null;<p></p></font></span>
<span><font face="宋体"><span>    </span>}<p></p></font></span>

配置虚拟表单

如果应用程序使用目前的配置,则会出现一些不理想的行为。例如,如果用户在现有行的第一列中输入无效日期,然后单击Add按钮,操作将会失败,由于日期转换错误而拒绝提交表单。用户单击Add按钮时的理想行为是:放弃处理表中的输入字段,以便在忽略现有行的暂挂编辑内容的情况下添加新行。

同样地,当用户单击Revert按钮时(其目的是放弃所有编辑内容),也应该忽略以上情况的编辑内容。但是,当用户单击Delete按钮时,您仍然希望进行验证,因为此按钮不仅删除某个行,而 且还会提交所有暂挂的更改,这要求先处理输入字段。

要为确保用户在单击AddRevert按钮时放弃处理(包括验证检查)页面上的输入字段,您可以让这些按钮提交虚拟表单。在这种情况下,您可以使两个按钮提交同一个虚拟表单,因 为它们需要一个没有参与者的虚拟表单。

1.        Visual Designer中,按Ctrl键的同时单击以选择AddRevertDelete按钮,单击鼠标右键,然后从弹出菜单中选择Configure Virtual Forms选项。

Configure Virtual Forms窗口中,<span>add</span><span>revert</span><span>delete</span>应出现在左上角,表明这些按钮处于选定状态。

2.      Configure Virtual Forms窗口中,单击New按钮,将该新虚拟表单命名为<span>add/revert/delete</span>,然后将Submit设置为Yes。单击OK按钮。

测试应用程序:第5部分

通过单击Run Main Project按钮  以生成、部署和运行项目。部署后,程序可执行以下功能:

l          从下拉列表中选择一个名字,并显示此人的行程摘要。

l          编辑现有的行程信息,并将更改保存到数据库中。

l          编辑具有不正确的日期格式的现有行程信息,然后单击Add Trip按钮添加新行,或者单击Revert Changes按钮放弃编辑。

l          在表中添加行,填写行程字段,并将更改保存到数据库中。

l          从表中(同时从数据库中)删除行。

l          放弃编辑内容,并恢复为数据库中最近保存的数据。

结束语

在本教程中,您将Table组件、Text Field组件以及Drop Down List组件和数据库中的信息进行了关联。此外,还为组件设置了属性,添加了prerender和事件代码,从而可以插入、更新和删除数据库中的数据,并恢复在表单上输入的更改。您还使用了虚拟表单,这使得应用程序使用一个页面即可,并且在添加行或恢复更改时提交的数据可以绕过有效性检查。

 
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
MySQL中的存储过程是什么?MySQL中的存储过程是什么?May 01, 2025 am 12:27 AM

存储过程是MySQL中的预编译SQL语句集合,用于提高性能和简化复杂操作。1.提高性能:首次编译后,后续调用无需重新编译。2.提高安全性:通过权限控制限制数据表访问。3.简化复杂操作:将多条SQL语句组合,简化应用层逻辑。

查询缓存如何在MySQL中工作?查询缓存如何在MySQL中工作?May 01, 2025 am 12:26 AM

MySQL查询缓存的工作原理是通过存储SELECT查询的结果,当相同查询再次执行时,直接返回缓存结果。1)查询缓存提高数据库读取性能,通过哈希值查找缓存结果。2)配置简单,在MySQL配置文件中设置query_cache_type和query_cache_size。3)使用SQL_NO_CACHE关键字可以禁用特定查询的缓存。4)在高频更新环境中,查询缓存可能导致性能瓶颈,需通过监控和调整参数优化使用。

与其他关系数据库相比,使用MySQL的优点是什么?与其他关系数据库相比,使用MySQL的优点是什么?May 01, 2025 am 12:18 AM

MySQL被广泛应用于各种项目中的原因包括:1.高性能与可扩展性,支持多种存储引擎;2.易于使用和维护,配置简单且工具丰富;3.丰富的生态系统,吸引大量社区和第三方工具支持;4.跨平台支持,适用于多种操作系统。

您如何处理MySQL中的数据库升级?您如何处理MySQL中的数据库升级?Apr 30, 2025 am 12:28 AM

MySQL数据库升级的步骤包括:1.备份数据库,2.停止当前MySQL服务,3.安装新版本MySQL,4.启动新版本MySQL服务,5.恢复数据库。升级过程需注意兼容性问题,并可使用高级工具如PerconaToolkit进行测试和优化。

您可以使用MySQL的不同备份策略是什么?您可以使用MySQL的不同备份策略是什么?Apr 30, 2025 am 12:28 AM

MySQL备份策略包括逻辑备份、物理备份、增量备份、基于复制的备份和云备份。1.逻辑备份使用mysqldump导出数据库结构和数据,适合小型数据库和版本迁移。2.物理备份通过复制数据文件,速度快且全面,但需数据库一致性。3.增量备份利用二进制日志记录变化,适用于大型数据库。4.基于复制的备份通过从服务器备份,减少对生产系统的影响。5.云备份如AmazonRDS提供自动化解决方案,但成本和控制需考虑。选择策略时应考虑数据库大小、停机容忍度、恢复时间和恢复点目标。

什么是mySQL聚类?什么是mySQL聚类?Apr 30, 2025 am 12:28 AM

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

如何优化数据库架构设计以在MySQL中的性能?如何优化数据库架构设计以在MySQL中的性能?Apr 30, 2025 am 12:27 AM

在MySQL中优化数据库模式设计可通过以下步骤提升性能:1.索引优化:在常用查询列上创建索引,平衡查询和插入更新的开销。2.表结构优化:通过规范化或反规范化减少数据冗余,提高访问效率。3.数据类型选择:使用合适的数据类型,如INT替代VARCHAR,减少存储空间。4.分区和分表:对于大数据量,使用分区和分表分散数据,提升查询和维护效率。

您如何优化MySQL性能?您如何优化MySQL性能?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用