搜尋
首頁資料庫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編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。