時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)
?? 我們?cè)谶@里講談到創(chuàng)建表格和數(shù)據(jù)庫(kù)交換的問(wèn)題,實(shí)際開(kāi)發(fā)中肯定會(huì)遇到數(shù)據(jù)庫(kù)交互的問(wèn)題,對(duì)數(shù)據(jù)庫(kù)的操作也是實(shí)現(xiàn)更多功能的前提。
?? 應(yīng)用程序需要將用戶(hù)填入的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,同時(shí)又要將數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀取到前臺(tái)應(yīng)用程序供用戶(hù)查詢(xún)。而表格工具無(wú)疑是這個(gè)用戶(hù)與數(shù)據(jù)庫(kù)之間交互理想的中間平臺(tái)。筆者今天就跟大家分享一下,再Java平臺(tái)中建立表格的一些技巧。
?? 一、是否允許用戶(hù)對(duì)記錄進(jìn)行重排序?
?? 當(dāng)從數(shù)據(jù)庫(kù)中讀取記錄然后反映在表格中,有很多地方可以控制記錄的排序。在不排序的情況下,從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)的時(shí)候是根據(jù)記錄創(chuàng)建的時(shí)間先后順序反映在前臺(tái)的表格中。為了控制顯示的順序,數(shù)據(jù)庫(kù)管理員可以在數(shù)據(jù)庫(kù)層面上,針對(duì)這張表格創(chuàng)建一張視圖,并在視圖中設(shè)置排序規(guī)則,來(lái)改變默認(rèn)的排序順序。這張方式效率比較高,但是也比較死板。因?yàn)橹挥袛?shù)據(jù)庫(kù)管理員才能夠更改這個(gè)排序規(guī)則。其次在Java平臺(tái)中,將相關(guān)的SQL語(yǔ)句傳遞給數(shù)據(jù)庫(kù)以獲取想要的數(shù)據(jù)時(shí),也可以利用order by關(guān)鍵字來(lái)設(shè)置排序的順序。不過(guò)這跟數(shù)據(jù)庫(kù)層面上設(shè)置一樣,也有一個(gè)致命的缺陷,即這個(gè)排序規(guī)則必須預(yù)先設(shè)置好。如果用戶(hù)不滿(mǎn)意當(dāng)前的排序規(guī)則,則必須要系統(tǒng)管理員或者開(kāi)發(fā)人員幫忙才能夠更改排序方式。顯然這兩個(gè)排序方式都不是很靈活。
?? 其實(shí)用戶(hù)需要的是在前臺(tái)應(yīng)用程序窗口中,可以根據(jù)需要對(duì)任何一個(gè)字段進(jìn)行排序。如點(diǎn)擊某個(gè)字段名字,就根據(jù)這個(gè)字段名進(jìn)行排序。在Java平臺(tái)創(chuàng)建表格的類(lèi)中,本身就已經(jīng)集成了重新排列的功能。如在創(chuàng)建表格的時(shí)候,可能需要用到一個(gè)JTableHeader類(lèi)(可以用這個(gè)類(lèi)創(chuàng)建不支持滾動(dòng)條的表格),在這個(gè)類(lèi)中,有一個(gè)setRecorderingAllowed方法,其會(huì)有true與false兩個(gè)返回值。如果這個(gè)方法返回的時(shí)true,則表示允許用戶(hù)在這個(gè)表格上對(duì)記錄進(jìn)行重新排序。如果返回的是false的話(huà),則表示用戶(hù)無(wú)法在表格上對(duì)記錄進(jìn)行重新排序。如果不滿(mǎn)意現(xiàn)在的排序規(guī)則,只有要求系統(tǒng)管理員或者開(kāi)發(fā)人員在后臺(tái)更改排序規(guī)則。
?? 對(duì)這個(gè)排序規(guī)則的設(shè)置,筆者有一個(gè)建議。首先程序開(kāi)發(fā)人員或者數(shù)據(jù)庫(kù)管理人員要根據(jù)用戶(hù)常見(jiàn)的需求,即最常用的排序規(guī)則來(lái)進(jìn)行設(shè)置。如此的話(huà),用戶(hù)一打開(kāi)前臺(tái)表格,就可以得到自己想要的排序方式。然后在表格上也允許用戶(hù)進(jìn)行重新排序。當(dāng)用戶(hù)有需要的時(shí)候,可以輕易實(shí)現(xiàn)按任何一個(gè)字段進(jìn)行排序。筆者認(rèn)為這種排序規(guī)則比較合理。在實(shí)際應(yīng)用程序開(kāi)發(fā)中,筆者也是如此做的。不過(guò)這里需要注意一點(diǎn),如果查詢(xún)出來(lái)的紀(jì)錄比較多,此時(shí)即使在前臺(tái)對(duì)記錄進(jìn)行排序,效率也會(huì)比較低。為此對(duì)于大記錄的表格,筆者的建議是在數(shù)據(jù)庫(kù)設(shè)計(jì)或者應(yīng)用程序開(kāi)發(fā)中,就要評(píng)估用戶(hù)最常常用的排序規(guī)則。如在產(chǎn)品信息窗口中,可以按關(guān)鍵字或者產(chǎn)品類(lèi)別進(jìn)行排序。如此就可以最大程度的減少二次排序,提高應(yīng)用程序的性能。
?? 二、是否允許對(duì)表格中的內(nèi)容進(jìn)行編輯?
?? 在表格創(chuàng)建的時(shí)候,還需要注意是否允許用戶(hù)對(duì)表格中的數(shù)據(jù)進(jìn)行更改。對(duì)于這一點(diǎn)程序開(kāi)發(fā)人員也可以在多個(gè)層面對(duì)其進(jìn)行控制。如某個(gè)表格對(duì)于任何用戶(hù)來(lái)說(shuō)都是只讀的,只允許應(yīng)用程序?qū)ζ溥M(jìn)行更新,那么就可以在數(shù)據(jù)庫(kù)層面進(jìn)行控制。如對(duì)于系統(tǒng)日志表格來(lái)說(shuō),用戶(hù)就不能夠進(jìn)行更改,只有查詢(xún)。為此就可以針對(duì)這張表格創(chuàng)建一張只讀的視圖,供用戶(hù)查詢(xún)使用。而應(yīng)用程序在更新的時(shí)候,則直接更新對(duì)應(yīng)的基礎(chǔ)表格。這就是通過(guò)在數(shù)據(jù)庫(kù)層面對(duì)表格中的內(nèi)容是否允許編輯進(jìn)行控制。
?? 除此之外,還可以通過(guò)權(quán)限來(lái)進(jìn)行控制。如可以在數(shù)據(jù)庫(kù)中設(shè)置不同的用戶(hù)、不同的權(quán)限來(lái)控制前臺(tái)表格對(duì)應(yīng)的后臺(tái)數(shù)據(jù)庫(kù)表格的讀寫(xiě)權(quán)限。在應(yīng)用程序中,也可以控制對(duì)這張表格中內(nèi)容的編輯能力。默認(rèn)情況下,利用Java提供的現(xiàn)有類(lèi)創(chuàng)建表格時(shí),是允許用戶(hù)對(duì)表格中的內(nèi)容進(jìn)行編輯的。如用戶(hù)只要雙擊單元格,就可以對(duì)表格中的內(nèi)容進(jìn)行更改。如果系統(tǒng)管理員不希望用戶(hù)對(duì)表格中的內(nèi)容進(jìn)行更新,則就需要重構(gòu)JTable類(lèi)中的isCellEdittable方法。默認(rèn)情況下,這個(gè)方法返回的值是true,表示允許用戶(hù)對(duì)其進(jìn)行更改。如果返回的時(shí)false的話(huà),在禁止用戶(hù)對(duì)單元格進(jìn)行編輯。
?? 其實(shí),在應(yīng)用程序開(kāi)發(fā)過(guò)程中,這個(gè)是一個(gè)動(dòng)態(tài)的過(guò)程。如就拿銷(xiāo)售訂單來(lái)說(shuō),如果單據(jù)編號(hào)是自動(dòng)編號(hào)的,那么就不允許用戶(hù)對(duì)單據(jù)編號(hào)這個(gè)列的內(nèi)容進(jìn)行更改。這個(gè)列中的內(nèi)容都是系統(tǒng)自動(dòng)產(chǎn)生的。相反,如果這個(gè)銷(xiāo)售訂單編號(hào)是手工創(chuàng)建的,那么就允許用戶(hù)對(duì)這個(gè)字段進(jìn)行更改。所以在應(yīng)用程序設(shè)計(jì)的時(shí)候,最好不要將這個(gè)寫(xiě)死。一般可以在單據(jù)性別設(shè)置處進(jìn)行設(shè)置。即設(shè)置一個(gè)開(kāi)關(guān),來(lái)控制是否允許用戶(hù)對(duì)表格中的單元格進(jìn)行編輯。
?? 三、記錄時(shí)單選還是多選?
?? 在使用Excel表格的時(shí)候,記錄的選擇模式有很多種。如用戶(hù)可以選擇一條記錄,也可以選擇多條連續(xù)的紀(jì)錄。甚至在其他鍵的幫助下,還可以選擇不連續(xù)的紀(jì)錄等等。特別是在同一個(gè)時(shí)間內(nèi)選擇多條記錄,這可以在很大程度上提高復(fù)制粘貼的效率。
?? 在利用Java語(yǔ)言創(chuàng)建的表格中,也具有類(lèi)似的功能。如在創(chuàng)建表格的類(lèi)中有一個(gè)setSelectionMode方法,就是用來(lái)控制選擇模式的。默認(rèn)情況下,這個(gè)方法有三個(gè)返回值。如果返回的是0,表示用戶(hù)在表格中只允許選擇一條記錄,如不允許選擇多條。如果返回的時(shí)1的話(huà),則表示用戶(hù)可以通過(guò)鼠標(biāo)拖拉等手段同時(shí)選擇多條記錄,單是這些記錄必須連續(xù)的,而不允許分散。如果這個(gè)方法返回的值是2,則表示用戶(hù)可以隨意的選擇多條記錄,這些記錄可以是連續(xù)的,也可以是不連續(xù)的。這個(gè)記錄的選擇模式,一般情況下不會(huì)對(duì)性能或者安全產(chǎn)生不利的影響。故到底采用哪種方式,最重要的還是要根據(jù)用戶(hù)的需求來(lái)定。
?? 除了以上的這些設(shè)置外,程序開(kāi)發(fā)人員還可以對(duì)表格的外觀進(jìn)行定義。如是否允許用戶(hù)調(diào)整列的寬度;是否允許按比例來(lái)調(diào)整表格所有列的寬度;如是否啟用自動(dòng)調(diào)整功能,即按照字段的大小來(lái)進(jìn)行自動(dòng)調(diào)整;還是只允許調(diào)整最后一列的寬度等等。一般情況下,如果沒(méi)有特殊的需要,可以允許用戶(hù)根據(jù)需要調(diào)整任一列的寬度。特別是在需求不能夠確定的情況下,可以這么做。免得在用戶(hù)需要的時(shí)候,再去更改系統(tǒng)源代碼或者相關(guān)的設(shè)置。
?? 雖然說(shuō)以上這些內(nèi)容只是對(duì)表格的一些外觀的設(shè)置,如記錄的排序規(guī)則或者列的可編輯性,但是這些內(nèi)容對(duì)于應(yīng)用程序非常的重要,也是用戶(hù)用的最頻繁的一些操作。這不僅關(guān)系到后臺(tái)數(shù)據(jù)庫(kù)中數(shù)據(jù)的安全性,還會(huì)影響到應(yīng)用程序的性能。程序開(kāi)發(fā)人員必須對(duì)這方面的內(nèi)容引起重視。根據(jù)用戶(hù)的需求,切實(shí)的做好這方面的開(kāi)發(fā)定制。
關(guān)鍵詞標(biāo)簽:Java,數(shù)據(jù)庫(kù)
相關(guān)閱讀
熱門(mén)文章 eclipse中如何設(shè)置字體大小_eclipse字體大小設(shè)置方法 jsp 實(shí)現(xiàn)在線(xiàn)人數(shù)統(tǒng)計(jì) Eclipse優(yōu)化設(shè)置教程_Eclipse卡頓優(yōu)化設(shè)置技巧 JS截取字符串常用方法詳細(xì)整理
人氣排行 JS驗(yàn)證日期格式是否正確 Java中3DES加密解密調(diào)用示例 Java技術(shù)-J2EE開(kāi)發(fā)日記-MyEclipse快捷鍵與插件大全 eclipse中如何設(shè)置字體大小_eclipse字體大小設(shè)置方法 Eclipse優(yōu)化設(shè)置教程_Eclipse卡頓優(yōu)化設(shè)置技巧 JavaScript基本語(yǔ)法-常量和變量 用Java刪除文件夾里的所有文件 100多個(gè)很有用的JavaScript函數(shù)以及基礎(chǔ)寫(xiě)法匯總