陳鋒 朱建風(fēng)
摘要:使用計(jì)算機(jī)輔助工程,利用計(jì)算機(jī)數(shù)據(jù)庫、軟件開發(fā)、圖形化技術(shù)等專業(yè)知識技能,通過實(shí)踐使用者的需求,將數(shù)據(jù)庫SQL語句間接的應(yīng)用計(jì)算機(jī)操作,供使用者人性化的應(yīng)用。避免數(shù)據(jù)庫直接操作SQL語句的攻擊和煩瑣應(yīng)用,提高使用者的工作效益、數(shù)據(jù)使用價(jià)值及數(shù)據(jù)庫安全性。
關(guān)鍵詞:數(shù)據(jù)庫;SQL語句;運(yùn)算;動(dòng)作;可視化操作
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)07-0005-03
1 引言
隨著互聯(lián)網(wǎng)技術(shù)和大數(shù)據(jù)的高速發(fā)展,數(shù)據(jù)庫驅(qū)動(dòng)的WEB應(yīng)用得到廣泛的普及。目前,很多單位和機(jī)構(gòu)都是基本架構(gòu)一個(gè)數(shù)據(jù)庫和N個(gè)面向用戶業(yè)務(wù)的WEB交互網(wǎng)頁,通過WEB頁面后臺腳本來獲取用戶交互界面提供的特定數(shù)據(jù)信息。但由于系統(tǒng)軟件研發(fā)人員在實(shí)現(xiàn)系統(tǒng)模塊功能時(shí),往往會(huì)忽悠或輕視系統(tǒng)的安全性,在系統(tǒng)中留有大量的GUG (漏洞),給各業(yè)務(wù)系統(tǒng)留下了很大的安全隱患。
可視化的意義,不但展現(xiàn)全貌,增強(qiáng)理解、便于對話、探索、交流,還簡化復(fù)雜性,增強(qiáng)審視。繼而,數(shù)據(jù)庫的可視化操作是使用者得以接受的可行性方案和最佳選擇。
2 可視化操作
2.1 數(shù)據(jù)庫連接池
數(shù)據(jù)庫的連接池專門負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫的連接。它允許應(yīng)用程序重用現(xiàn)有的數(shù)據(jù)庫連接,而不必重新建立一個(gè)全新的連接,并釋放出最大空閑的空間給更多的數(shù)據(jù)庫來連接,因?yàn)闆]有釋放數(shù)據(jù)庫的連接。因此,該技術(shù)可以顯著提升數(shù)據(jù)庫操作的性能。
在Java語言程序開發(fā)中,由于它采用開源Java數(shù)據(jù)庫連接池,管理的是享元模式。因此,簡單的連接池設(shè)計(jì)思路如下:
(1)連接池配置屬性“DBbean”:主要存儲(chǔ)一些可以配置的屬性;
(2)連接池接口“IConnectionPool”:主要定義一些獲取連接的基本方法;
(3)實(shí)現(xiàn)接口“ConnectionPool”:對連接池接口的操作進(jìn)行具體的實(shí)現(xiàn),并添加一些其他方法;
(4)連接池的管理“ConnectionPoolManager”:主要是管理全部的不同的連接池,全部的連接都是通過這個(gè)連接池來獲得的連接;
(5)另外還有幾個(gè)測試類和連接信息模擬的類,這里就不進(jìn)行XML和配置文件信息的讀取。
2.2 運(yùn)算片段
2.2.1 交集比對
交集比對的前提條件必須是兩張及兩張以上的數(shù)據(jù)表,數(shù)據(jù)表是通過數(shù)據(jù)庫連接池獲取??此苾刹胶芎唵蔚倪^程,實(shí)際需要后臺開發(fā)語言將前端展現(xiàn)的表,運(yùn)用在開發(fā)語言后臺編譯中,規(guī)范定義這些數(shù)據(jù)控制語言,對控制語言歸類建立,且把表變量化。
如JAVA中取交集的常用方法是retainAll,有兩個(gè)集合newCoures、oldCourses,怎樣判斷這兩個(gè)集合是否包含有相同的對象或元素,通常都使用retainAll方法:oldCourses.retainAll(newCoures)。如果存在相同元素,oldCourses中僅保留相同的元素。如果不存在相同元素,oldCourse會(huì)變?yōu)榭铡H绻卸鄠€(gè)集合oldCourses1、oldCourses2、oldCourses3等,分別與newCourses比較,應(yīng)該將newCourses統(tǒng)一放在后面,像這樣:
oldCourses1.retainAll(newCoures);
oldCourses2.retainAll(newCoures);
oldCourses3.retainAll(newCoures);
public class Test {
public static void main(String[] args) {
List
List
List
for (inti = 0; i< 20; i++) {
list1.add(i+"");
if(i%2 == 0) {
list2.add(i+"");
}
list3.add(i+"@");
}
// list1 與 list2 存在相同元素,list1集合只保留list2中存在的元素
list1.retainAll(list2);
if(list1.isEmpty()) {
System.out.println("不包含");
} else {
System.out.println("包含");
}
System.out.println(list1);
// list1 與 list3 不存在相同元素,list1集合變?yōu)榭?/p>
list1.retainAll(list3);
if(list1.isEmpty()) {
System.out.println("不包含");
} else {
System.out.println("包含");
}
System.out.println(list1);
}
}
2.2.2 條件碰撞
條件碰撞的前提條件必須是兩張及兩張以上的數(shù)據(jù)表,數(shù)據(jù)表是通過數(shù)據(jù)庫連接池獲取。較為復(fù)雜的條件碰撞方法,是需要根據(jù)使用者的輸入條件來判斷某個(gè)參數(shù)是否合法,如果合法的話,才能當(dāng)作過濾的條件,常規(guī)做法就是在查詢SQL語句中賦值給一個(gè)字符串變量,然后再根據(jù)判斷條件動(dòng)態(tài)的拼接where條件來進(jìn)行查詢,通過不確定的字段名稱,而產(chǎn)生的SQL字符串拼接,例如有家公司要做一個(gè)系統(tǒng),需要支持多種語言,這個(gè)時(shí)候就要將語言信息存儲(chǔ)在數(shù)據(jù)庫當(dāng)中。然后,再根據(jù)客戶所選擇的查詢對應(yīng)語言字段來進(jìn)行具體顯示。
考慮到系統(tǒng)的性能,可能會(huì)使用存儲(chǔ)過程來減少網(wǎng)絡(luò)通信量和提高響應(yīng)的速度。那么,在存儲(chǔ)過程中,通常會(huì)傳入一個(gè)參數(shù),然后再根據(jù)這個(gè)參數(shù)來查詢指定的語言字段,當(dāng)把SQL語句拼好,最后傳給數(shù)據(jù)庫執(zhí)行,具體實(shí)現(xiàn)的寫法如下:
DECLARE @sqlNVARCHAR(100);
DECLARE @paraNVARCHAR(20);
SET @para = 'Chinese';
SET @sql = 'select ID, ' + @para + ' from SysLanguage'
print @sql
exec(@sql)
2.2.3 數(shù)據(jù)合并
數(shù)據(jù)合并的前提條件必須是兩張及兩張以上的數(shù)據(jù)表,數(shù)據(jù)表是通過數(shù)據(jù)庫連接池獲取。如何進(jìn)行數(shù)據(jù)合并工作,大數(shù)據(jù)時(shí)代的到來,讓數(shù)據(jù)量級的增加不可與以往相比,而且數(shù)據(jù)往往分布在數(shù)據(jù)庫的不同表中,想把這些數(shù)據(jù)變成有價(jià)值的信息,需要進(jìn)行數(shù)據(jù)合并處理的工作,而這個(gè)過程并不容易。
面對一堆無序的數(shù)據(jù)時(shí),很多時(shí)候很難有效地開展工作,需要對不同數(shù)據(jù)進(jìn)行數(shù)據(jù)收集、整理、清洗,加載到一個(gè)新的數(shù)據(jù)表中,為數(shù)據(jù)使用者提供一個(gè)統(tǒng)一的數(shù)據(jù)視圖,這樣才便于管理,而這個(gè)過程就是數(shù)據(jù)整合。數(shù)據(jù)整合的過程自然是少不了數(shù)據(jù)合并,無論格式或大小如何,都能隨時(shí)通過重復(fù)數(shù)據(jù)刪除,驗(yàn)證,標(biāo)準(zhǔn)化和豐富數(shù)據(jù),干凈,高質(zhì)量的數(shù)據(jù)就此生成,可以用于數(shù)據(jù)訪問,數(shù)據(jù)報(bào)告和數(shù)據(jù)分析。
數(shù)據(jù)合并是通過使用者對原來的數(shù)據(jù),通過使用者對新業(yè)務(wù)需求的掌握和理解,將原有的數(shù)據(jù)進(jìn)行提煉,卻棄糟粕、取其精華的過程。
數(shù)據(jù)合并主要是將設(shè)置的條件轉(zhuǎn)換為特定數(shù)據(jù)庫的SQL語句,并執(zhí)行這些語句。數(shù)據(jù)合并所涉及的關(guān)鍵技術(shù)包括幾個(gè)方面,異構(gòu)數(shù)據(jù)的連接方式、自增主鍵的合并處理、數(shù)據(jù)覆蓋方式。
2.2.4 差集比對
通常來說A、B是兩個(gè)集合,則全部屬于A且不屬于B的元素所構(gòu)成的集合,叫作集合A減集合B或者集合A與集合B之差,依此類推,對于集合A、B,我們把集合x∣x∈A,且x?B叫作A與B的差集。在做差集比對前,輸入的數(shù)據(jù)表(兩張或兩張以上)是具備單表字段的條件篩選處理,且是可視化操作按鈕來實(shí)現(xiàn)。在此之后,才使用可視化差集比對按鈕控件來對前面數(shù)據(jù)表處理的結(jié)果數(shù)據(jù),進(jìn)行差集比對,最終形成差集比對的結(jié)果。
如果開發(fā)語言中需要對其實(shí)現(xiàn)差集,可以參考如下腳本編譯:
兩個(gè)集合R和S的差集通常表述成R-S,其運(yùn)算結(jié)果也是一個(gè)與R和S同結(jié)構(gòu)的集合,其成員是屬于R但不屬于S的元組的集合。
2.2.5 數(shù)據(jù)清洗
數(shù)據(jù)清洗的前提條件是一張數(shù)據(jù)表的輸入,不能對兩張及以上數(shù)據(jù)表進(jìn)行清洗處理,數(shù)據(jù)表是通過數(shù)據(jù)庫連接池獲取。數(shù)據(jù)清洗原理是利用有關(guān)技術(shù)如數(shù)理統(tǒng)計(jì)、數(shù)據(jù)挖掘或預(yù)定義的清理規(guī)則將臟數(shù)據(jù)轉(zhuǎn)化為滿足數(shù)據(jù)質(zhì)量要求的數(shù)據(jù),清洗需要經(jīng)歷兩個(gè)步驟,第一個(gè)步驟是數(shù)據(jù)去重,首先是去重字段,然后再去掉重復(fù)值;第二個(gè)步驟才是數(shù)據(jù)清洗,清洗的原則如身份證有小寫字母的,全部自動(dòng)改為大寫,身份證不符合十八位的全部干掉等。
數(shù)據(jù)清洗的方法一般來說,是將數(shù)據(jù)庫精簡以除去重復(fù)的記錄,且使剩余的部分轉(zhuǎn)換成標(biāo)準(zhǔn)的可接收的格式過程。標(biāo)準(zhǔn)模型則是將數(shù)據(jù)錄入到數(shù)據(jù)清理處理的容器中,通過一系列的步驟進(jìn)行“清理”數(shù)據(jù),然后在以期望的格式輸出清理過的數(shù)據(jù)。數(shù)據(jù)清理從數(shù)據(jù)的唯一性、一致性、完整性、適時(shí)性、有效性、準(zhǔn)確性來處理數(shù)據(jù)的越界值、丟失值、重復(fù)數(shù)據(jù)、不一致代碼等問題。
2.2.6 數(shù)據(jù)排序
數(shù)據(jù)排序的前提條件是一張數(shù)據(jù)表的輸入,不能對兩張及以上數(shù)據(jù)表進(jìn)行排序處理,數(shù)據(jù)表是通過數(shù)據(jù)庫連接池獲取。寓意是將一張數(shù)據(jù)庫表通過可視化界面操作條件查詢出來的數(shù)據(jù)結(jié)果,連通后使用數(shù)據(jù)排序運(yùn)算法則,對其產(chǎn)生的臨時(shí)結(jié)果進(jìn)行排序,排序的原則是所有字段可以任意挑選和組合,然后再按排序產(chǎn)生結(jié)果數(shù)據(jù)集,排序有升序和降序。
數(shù)據(jù)排序是按一定的順序?qū)?shù)據(jù)進(jìn)行排列,以方便使用者通過預(yù)覽數(shù)據(jù)來發(fā)現(xiàn)一些明顯的特征或趨勢,便于找到解決問題的線索。除此之外,排序還有助于對數(shù)據(jù)進(jìn)行檢查和糾錯(cuò),以及為重新歸類或分組等提供便利。在特點(diǎn)場景中,排序本身就是分析的目的之一,例如了解究竟誰是中國汽車生產(chǎn)的三巨頭,對于汽車生產(chǎn)廠商而言不論它是作為伙伴還是競爭者,都是很有用的信息。
好的排序方法可以有效提高排序速度,提高排序效果。在計(jì)算機(jī)領(lǐng)域,主要使用數(shù)據(jù)排序的方法,根據(jù)占用內(nèi)存的方式不同,一般可以分為兩大類,即內(nèi)部排序方法、外部排序方法。
2.2.7 數(shù)據(jù)篩選
大數(shù)據(jù)環(huán)境下,數(shù)據(jù)量的快速積累,若想要分析出海量數(shù)據(jù)所蘊(yùn)含的價(jià)值,并篩選出具有價(jià)值的數(shù)據(jù),相當(dāng)重要。然而數(shù)據(jù)篩選在整個(gè)數(shù)據(jù)處理中,又是處于至關(guān)重要的地位上。數(shù)據(jù)量的增加及結(jié)構(gòu)的復(fù)雜化,這使得面向大數(shù)據(jù)的數(shù)據(jù)篩選必然會(huì)耗費(fèi)很大的資源。因此,想要快速準(zhǔn)確的篩選出有價(jià)值的數(shù)據(jù),那么選擇合適的算法就十分必要。然而每個(gè)算法都有著自己特定的環(huán)境,大數(shù)據(jù)環(huán)境下,數(shù)據(jù)復(fù)雜度的增加提升了選擇合適算法的困難;其次,大數(shù)據(jù)的巨大數(shù)據(jù)量也使得通過單一算法分析出有價(jià)值的數(shù)據(jù)是越來越困難。
編輯數(shù)據(jù)篩選中數(shù)據(jù)挖掘的算法分析,主要有三種,分類算法分析、聚類算法分析、關(guān)聯(lián)算法分析。關(guān)聯(lián)算法的數(shù)據(jù)挖掘通常會(huì)分為兩步,第一步就是在集合中尋找出現(xiàn)頻率較高的項(xiàng)目組,這些項(xiàng)目組相當(dāng)于整體記錄而言必須達(dá)到一定水平。通常會(huì)認(rèn)為設(shè)置要分析實(shí)體間的支持度,如果兩實(shí)體間支持度大于設(shè)定值,那么稱二者為高頻項(xiàng)目組。第二步是利用第一步找出的高頻項(xiàng)目組來確定二者間的關(guān)系,這種關(guān)系通常由二者間的概率表示。即計(jì)算A事件出現(xiàn)時(shí)B事件出現(xiàn)的概率,公式為(A與B同時(shí)出現(xiàn)的概率)/(A出現(xiàn)的概率),當(dāng)比值滿足既定的概率時(shí),才能說明兩事件相關(guān)聯(lián)。關(guān)聯(lián)分析能夠從數(shù)據(jù)庫中找出已有數(shù)據(jù)間的隱含關(guān)系,從而利用數(shù)據(jù)獲得潛在價(jià)值。
2.2.8 分類統(tǒng)計(jì)
分類統(tǒng)計(jì)兼有兩方面(分與合)的含義,是將總體區(qū)分為性質(zhì)相異的若干部分,將性質(zhì)相同的許多個(gè)體合成一個(gè)類。
統(tǒng)計(jì)整理的任務(wù)是使零散數(shù)據(jù)系統(tǒng)化,但怎樣使數(shù)據(jù)系統(tǒng)化,本著什么去歸類,這就取決于統(tǒng)計(jì)分類。在取得完整、正確的統(tǒng)計(jì)數(shù)據(jù)前提下,統(tǒng)計(jì)分類的優(yōu)劣是決定整個(gè)統(tǒng)計(jì)數(shù)據(jù)研究成敗的關(guān)鍵,它直接關(guān)系到統(tǒng)計(jì)分析數(shù)據(jù)的質(zhì)量。
例如:將一所學(xué)校的人,根據(jù)老師、學(xué)生、男性、女性、年齡、成績、特點(diǎn)等標(biāo)識,進(jìn)行分類統(tǒng)計(jì)。
目的就是保持分類內(nèi),統(tǒng)計(jì)數(shù)據(jù)的一致性和組之間數(shù)據(jù)的差異性,便于運(yùn)用所有的統(tǒng)計(jì)方法來研究現(xiàn)象的數(shù)量表現(xiàn)和數(shù)量關(guān)系,從而正確地認(rèn)識事物的本質(zhì)規(guī)律。
本案在做分類統(tǒng)計(jì)前,輸入的數(shù)據(jù)表(一張)是具備單表字段的條件篩選處理,且是可視化操作按鈕來實(shí)現(xiàn)。
2.2.9 SQL編程
SQL可視化編程針對數(shù)據(jù)庫表,采用系統(tǒng)開發(fā)的SQL編譯控制臺,對其編寫SQL語言,由系統(tǒng)控制臺轉(zhuǎn)譯成數(shù)據(jù)庫可識別的SQL命令,并把執(zhí)行的結(jié)果和情況,由SQL編譯控制臺對其接收,將結(jié)果和情況可視化的反饋給使用者。此功能并非是使用數(shù)據(jù)庫或第三方數(shù)據(jù)庫工具,通過直接連接數(shù)據(jù)庫后編輯SQL語句而執(zhí)行的結(jié)果。
2.3 結(jié)果處理片段
通過運(yùn)算片段,將運(yùn)算片段執(zhí)行的結(jié)果,在結(jié)果區(qū)域內(nèi)展現(xiàn)出來。在出結(jié)果前,需要將具體的運(yùn)算進(jìn)行分類。在以上的運(yùn)算中,有針對一張表的運(yùn)算,也有針對兩張表的運(yùn)算,更有針對兩張表以上的運(yùn)算。那么結(jié)果出來之后,很有可能再選擇運(yùn)算進(jìn)行處理,然后再出執(zhí)行結(jié)果,這一問題該如何處理呢?所以,需要將數(shù)據(jù)表、數(shù)據(jù)表操作、運(yùn)算、結(jié)果進(jìn)行分析。
考慮到以上問題,需要對運(yùn)算的種類進(jìn)行分類和定義,可以看出,一張數(shù)據(jù)表可視化操作的運(yùn)算,定義為單動(dòng)作運(yùn)算(有數(shù)據(jù)清洗、數(shù)據(jù)排序、數(shù)據(jù)篩選、分類統(tǒng)計(jì));兩張數(shù)據(jù)表及兩張數(shù)據(jù)表以上的運(yùn)算,定義為多動(dòng)作運(yùn)算(有交集比對、條件碰撞、數(shù)據(jù)合并、差集比對)。另外一種就是獨(dú)立的SQL編程控制臺,此定義是不涉及運(yùn)算的定義,僅僅為使用者提供通用編譯SQL語言的應(yīng)用平臺而已。
那么,單動(dòng)作運(yùn)算所出的結(jié)果同樣可以成為另外一個(gè)動(dòng)作運(yùn)算的輸入,也有可能是另外一個(gè)多動(dòng)作運(yùn)算的輸入,在這些不同的組合中,又有多少規(guī)律可循了?
首先,任何單動(dòng)作和多動(dòng)作的處理和執(zhí)行,歸納總結(jié)均是一端輸入,中間是動(dòng)作處理,另一端是輸出的結(jié)果,如下圖1所示。
再有就是結(jié)果成為新的輸入端,使用動(dòng)作后成為新的結(jié)果,如下圖2所示。
如果將上圖1和上圖2進(jìn)行合并,最終的規(guī)律如下圖3所示。
由上圖3可以看出,核心是動(dòng)作前后條件的處理,由此可以得出,針對單動(dòng)作的輸入,只能有一個(gè)條件輸入,兩個(gè)條件的輸入就會(huì)成為多動(dòng)作,最終動(dòng)作執(zhí)行的結(jié)果就是唯一的一個(gè)。
3 結(jié)論
數(shù)據(jù)庫可視化操作如今成為很多項(xiàng)目的必備功能,是數(shù)據(jù)探索以及數(shù)據(jù)表現(xiàn)的重要形式。然而,對于數(shù)據(jù)庫可視化操作的開發(fā)者來說,仍然有很多挑戰(zhàn)需要去面對。迎接這些挑戰(zhàn)的方法,必是很多專業(yè)的數(shù)據(jù)庫可視化操作開發(fā)者不愿意讓別人知道的秘密。
數(shù)據(jù)庫可視化操作可以產(chǎn)生一些分析結(jié)果,不過需要指出的是,數(shù)據(jù)庫可視化操作是一個(gè)輔助分析的工具,而不是數(shù)據(jù)分析的替代,更不是統(tǒng)計(jì)的替代。不過,要得出存在這些差異和相關(guān)性的可靠結(jié)論,還需要運(yùn)用統(tǒng)計(jì)學(xué)的方法。要對數(shù)據(jù)庫中的數(shù)據(jù)真正的掌握和了解,還需要有分析的技能以及專業(yè)的知識。
參考文獻(xiàn):
[1] 劉娜,奚玲,岳春生.基于模板的跨平臺可視化界面開發(fā)系統(tǒng)設(shè)計(jì)[J].電子科技,2017(8).
[2] 林子雨,賴永炫,林琛,等.云數(shù)據(jù)庫研究[J].軟件學(xué)報(bào),2012(2).
[3] 黃鋒,吳華瑞.基于J2EE應(yīng)用的SQL注入分析與防范[J].計(jì)算機(jī)工程與設(shè)計(jì),2012(10).
【通聯(lián)編輯:代影】