楊廷發(fā),蘭全祥
(攀枝花學(xué)院,四川 攀枝花 617000)
JDBC(Java DataBase Connectivity,Java數(shù)據(jù)庫連接)是Java的重要組成部分,也是Java程序訪問數(shù)據(jù)庫的主要方式[1].在系統(tǒng)開發(fā)中,不論是B/S還是C/S的系統(tǒng)都要進(jìn)行數(shù)據(jù)庫連接,JDBC可以實(shí)現(xiàn)系統(tǒng)和不同數(shù)據(jù)庫之間的連接,是Java程序設(shè)計課程重點(diǎn)講解的內(nèi)容之一.但現(xiàn)有的JDBC教學(xué)主要采用的是認(rèn)知主義學(xué)習(xí)理論(理論教學(xué))和行為主義學(xué)習(xí)理論(實(shí)踐教學(xué)),學(xué)生在學(xué)習(xí)過程中大多處于被動學(xué)習(xí)狀態(tài),學(xué)習(xí)效果較差.基于問題解決的教學(xué)方法根據(jù)《華盛頓協(xié)議》關(guān)于復(fù)雜工程問題特征的界定、解決復(fù)雜工程問題能力的要求以及工程實(shí)踐對高等工程教育人才培養(yǎng)提出的要求對學(xué)生復(fù)雜工程問題解決能力進(jìn)行培養(yǎng)[2].基于問題解決的教學(xué)方法將理論學(xué)習(xí)、實(shí)踐操作有機(jī)地結(jié)合在一起,采用問題驅(qū)動的方式將知識融入實(shí)際工程應(yīng)用當(dāng)中,有利于從根本上理解問題、解決問題,培養(yǎng)學(xué)生的創(chuàng)新意識,促進(jìn)學(xué)生問題意識的培養(yǎng),探索精神和創(chuàng)新能力的形成.另外,以基于問題解決的教學(xué)方法來構(gòu)建JDBC的知識體系,有助于學(xué)生對Java企業(yè)級開發(fā)框架的理解,如Hibernate、MyBatis等.
通過對部分高校的課程教學(xué)大綱以及一些在線課程的了解,大部分高校和在線課程均會講解JDBC的概念、JDBC的重要接口、JDBC的開發(fā)步驟等,少部分課程在講解JDBC的時候會提及到數(shù)據(jù)庫優(yōu)化(如數(shù)據(jù)庫連接池、DAO、配置文件、數(shù)據(jù)庫工具類等).
在JDBC的概念部分,重點(diǎn)講解JDBC是一些用Java語言編寫的類和接口的集合,是進(jìn)行數(shù)據(jù)庫操作的Java API,是Java程序訪問數(shù)據(jù)庫的一種規(guī)范,強(qiáng)調(diào)JDBC作為數(shù)據(jù)庫操作接口的作用.
在講解JDBC的結(jié)構(gòu)部分時,則應(yīng)突出JDBC的分層結(jié)構(gòu),使學(xué)生對JDBC的結(jié)構(gòu)有清晰、明確的認(rèn)識,為后續(xù)知識講解奠定基礎(chǔ).JDBC的結(jié)構(gòu)如圖1所示.
圖1 JDBC結(jié)構(gòu)
JDBC API是JDBC知識的核心,只有對API中的方法和作用有較為清晰的認(rèn)識和學(xué)習(xí),學(xué)生才能進(jìn)行Java數(shù)據(jù)庫開發(fā).在JDBC API講解時,應(yīng)重點(diǎn)講授 DriverManager、Connection、Statement、PreparedStatement、ResultSet等類和接口,同時對這些類和接口中的常用方法進(jìn)行講解.
2.2.1 DriverManager
DriverManager主要是用于管理已加載的驅(qū)動程序,如各種數(shù)據(jù)庫的驅(qū)動程序.在講解Driver-Manager類時應(yīng)強(qiáng)調(diào)到此類是JDBC開發(fā)的前序步驟,并重點(diǎn)講解Class.forName()方法和DriverManager.getConnection()方法.
在方法的講解中應(yīng)強(qiáng)調(diào)Class.forName()利用了Java的反射機(jī)制,在進(jìn)行驅(qū)動注冊的時候?qū)伋鯟lassNotFoundException 異常;getConnection()方法是DriverManager類的靜態(tài)方法,可通過類名直接調(diào)用,在獲得連接的時候可能會SQLException異常.
2.2.2 Connection
Connection表示一個和數(shù)據(jù)庫的連接,在Connection接口中可以創(chuàng)建用于執(zhí)行SQL語句的命令對象.在講解Connection接口時應(yīng)強(qiáng)調(diào)此接口用于創(chuàng)建命令對象的方法,如創(chuàng)建Statement、Prepared-Statement、CallableStatement命令對象,并講解 close()方法.在講解close()方法的時候應(yīng)注意訓(xùn)練學(xué)生“有借有還”的習(xí)慣,使用了資源一定要釋放.
2.2.3 Statement
Statement用于執(zhí)行靜態(tài)SQL語句并返回其執(zhí)行結(jié)果.在講解Statement接口時,應(yīng)重點(diǎn)講解Statement執(zhí)行SQL語句的方法,強(qiáng)調(diào)不同的SQL語句要選用不同的執(zhí)行方法.接口中executeQuery()方法主要用于執(zhí)行查詢類SQL語句,其返回類型為結(jié)果集ResultSet;executeUpdate()方法主要用于執(zhí)行更新類SQL語句,其返回類型為整型.
2.2.4 PreparedStatement
PreparedStatement表示預(yù)編譯的命令對象.在講解過程中應(yīng)強(qiáng)調(diào)PreparedStatement接口與Statement接口的區(qū)別,包括它們的優(yōu)缺點(diǎn)、使用區(qū)別以及適用情況.重點(diǎn)講解PreparedStatement接口的易讀性、高效性、安全性.
Statement命令對象在執(zhí)行帶參數(shù)的SQL語句時容易留下SQL注入式攻擊的隱患,Prepared-Statement能夠有效防止該攻擊手段,因此為了進(jìn)一步結(jié)合工程應(yīng)用實(shí)踐,可以適當(dāng)講解部分網(wǎng)絡(luò)安全知識.
2.2.5 ResultSet
ResultSet用于表示執(zhí)行查詢語句后得到的結(jié)果.在講解ResultSet()接口的時候,應(yīng)重點(diǎn)講解如何遍歷結(jié)果集,如何將查詢的數(shù)據(jù)轉(zhuǎn)化為Java集合.在講解此部分時可利用圖示的方式加深學(xué)生對于結(jié)果集處理的印象.
了解并學(xué)會JDBC的開發(fā)步驟有助于學(xué)生快速、準(zhǔn)確地進(jìn)行Java數(shù)據(jù)庫開發(fā).在JDBC開發(fā)步驟的講解過程中,一般將開發(fā)步驟分為注冊驅(qū)動并建立連接、發(fā)送命令并處理結(jié)果以及釋放資源三個步驟.
在JDBC開發(fā)步驟的教學(xué)中應(yīng)重點(diǎn)講解JDBC每個步驟之間的聯(lián)系,加深學(xué)生對于開發(fā)步驟的印象,并強(qiáng)調(diào)最后應(yīng)當(dāng)對所有資源進(jìn)行釋放.
JDBC優(yōu)化部分作為JDBC的進(jìn)階學(xué)習(xí),有助于培養(yǎng)學(xué)生對于復(fù)雜工程問題的解決能力[3].JDBC的優(yōu)化部分可以講解數(shù)據(jù)庫連接池、數(shù)據(jù)庫配置信息讀取、封裝數(shù)據(jù)庫工具類、DAO、工廠設(shè)計模式等內(nèi)容.
數(shù)據(jù)庫連接池的講解有助于提高學(xué)生對于程序優(yōu)化的能力;數(shù)據(jù)庫配置信息的讀取有助于培養(yǎng)學(xué)生“高內(nèi)聚,低耦合”的編程思維;封裝數(shù)據(jù)庫工具類有助于提高學(xué)生對程序復(fù)用的能力;DAO和設(shè)計模式有助于培養(yǎng)學(xué)生的模塊化設(shè)計思維.
各高校的Java相關(guān)課程體系都將JDBC部分納入了教學(xué)大綱,并要求學(xué)生系統(tǒng)地掌握J(rèn)DBC基礎(chǔ)知識,能實(shí)現(xiàn)簡單的數(shù)據(jù)庫開發(fā),但在實(shí)際的教學(xué)過程中仍存在一些問題需要解決.
3.1.1 內(nèi)容過于基礎(chǔ),無法與實(shí)際工程問題相結(jié)合
由于學(xué)時和學(xué)生能力水平的限制,以教師為中心的教學(xué)法通常只講解JDBC的基礎(chǔ)部分,很少會講解到實(shí)際工程問題的解決,如JDBC優(yōu)化部分.然而,簡單、基礎(chǔ)的JDBC知識離實(shí)際的工程應(yīng)用還有很大的差距,容易造成“學(xué)”與“用”不能有機(jī)結(jié)合.
大多數(shù)情況下,教學(xué)大綱中只要求講解什么是JDBC,JDBC是用來做什么的,怎么用JDBC進(jìn)行開發(fā).對原理性知識、本質(zhì)性問題(如“為什么JDBC可以實(shí)現(xiàn)與不同數(shù)據(jù)庫進(jìn)行連接”,“為什么JDBC是一組類和接口”)等深層次問題并不清楚.也就意味著大部分學(xué)生在學(xué)習(xí)的時候只知道是什么,而不知道為什么.
3.1.3 注重面向過程,忽視整體設(shè)計和工程需求
由于傳統(tǒng)教學(xué)法采用強(qiáng)化學(xué)習(xí)理論,不注重模塊化思想,因此在講解時將注重JDBC的實(shí)現(xiàn),而忽略JDBC在整個項(xiàng)目中扮演的角色;注重JDBC的實(shí)現(xiàn)過程,而忽略項(xiàng)目的整體設(shè)計以及架構(gòu).這對于培養(yǎng)學(xué)生解決復(fù)雜工程問題是相當(dāng)不利的,學(xué)生將很難從單一問題解決能力轉(zhuǎn)變?yōu)閺?fù)雜問題解決的能力.
3.1.4 知識構(gòu)建零散,與后續(xù)課程知識分離
在高校的課程設(shè)置中,同一系列的課程之間是存在一定聯(lián)系的.但是在實(shí)際教學(xué)中,由于師資的不確定性,教學(xué)團(tuán)隊(duì)之間溝通的不及時性可能造成前后續(xù)課程不連貫,知識零散等問題.
JDBC的后續(xù)課程包含Java EE、輕量級企業(yè)框架開發(fā)等,這些課程中涉及到的Hibernate以及MyBatis等框架的設(shè)計思想如果能在JDBC課程中有所體現(xiàn),那對于學(xué)生后續(xù)課程的學(xué)習(xí)將有很大的幫助.
基于問題解決的教學(xué)法是根據(jù)學(xué)習(xí)內(nèi)容設(shè)計問題,通過解決問題來獲得相應(yīng)的問題圖示及相關(guān)的概念性理解[4].使用問題解決教學(xué)法來講授JDBC內(nèi)容需要注意圍繞教學(xué)內(nèi)容和教學(xué)目標(biāo)的需要,要滿足復(fù)雜工程問題的特征需要,同時問題的復(fù)雜性和難度要從易到難、循序漸進(jìn)[5],以問題為導(dǎo)向的JDBC教學(xué)運(yùn)行模型如圖2所示.
“十二五”期間,通遼市規(guī)劃建設(shè)800萬畝旱澇保收、高產(chǎn)節(jié)水農(nóng)田,500萬畝飼草料基地,100萬畝設(shè)施農(nóng)業(yè),100萬畝特色種植業(yè)基地,500萬畝退耕還林還草工程,2000萬頭只牲畜養(yǎng)殖業(yè)基地,實(shí)施百億斤糧食加工轉(zhuǎn)化工程,1000個嘎查村的新農(nóng)村、新牧區(qū)建設(shè)工程,每年轉(zhuǎn)移農(nóng)村牧區(qū)人口10萬人,壓減3萬眼機(jī)電井。
圖2 以問題為導(dǎo)向的JDBC教學(xué)運(yùn)行模型
根據(jù)文獻(xiàn)[6]可以將問題分為引導(dǎo)性問題、分析性問題、開放性問題,學(xué)生在解決這些問題之后分別能達(dá)到理解和掌握、應(yīng)用于實(shí)踐、解決工程問題的能力層級.因此,在JDBC的教學(xué)中,可以將JDBC知識劃分到不同層級,并采用不同的問題設(shè)計,如表1所示.
表1 JDBC教學(xué)問題分層設(shè)計
基于問題解決的JDBC教學(xué)方案實(shí)施可大致分為分工職責(zé)的確定、具體問題的設(shè)計和方案實(shí)施.
3.3.1 分工職責(zé)
基于問題解決的教學(xué)方法主要是以學(xué)生為中心進(jìn)行教學(xué).教師主要負(fù)責(zé)設(shè)計問題、方向引導(dǎo)、技術(shù)指導(dǎo)和知識總結(jié)等,學(xué)生主要任務(wù)是根據(jù)教師設(shè)計的問題進(jìn)行問題分析、找到問題的解決思路,并在教師的引導(dǎo)和技術(shù)指導(dǎo)下對解決方案進(jìn)行優(yōu)化和開發(fā)實(shí)現(xiàn).教學(xué)方案中的分工職責(zé)如圖3所示.
圖3 教學(xué)方案中的分工與職責(zé)
基于問題解決的JDBC教學(xué)方法各環(huán)節(jié)具體實(shí)施內(nèi)容如下:
①教師設(shè)計并給出需要解決的問題,學(xué)生分析教師給出的問題并設(shè)計解決方案;②教師在學(xué)生提出解決方案時提供方向引導(dǎo),指導(dǎo)學(xué)生進(jìn)行方案優(yōu)化;③在對最終方案進(jìn)行實(shí)現(xiàn)時,教師應(yīng)提供相應(yīng)的技術(shù)指導(dǎo),如數(shù)據(jù)庫連接池的實(shí)現(xiàn)、properties屬性文件的讀取以及DAO等設(shè)計模式的實(shí)現(xiàn)等;④通過具體實(shí)現(xiàn)解決了教師給出的問題后,教師應(yīng)總結(jié)開發(fā)中所用到的知識,幫助學(xué)生對知識進(jìn)行固化.
3.3.2 具體問題設(shè)計及實(shí)施
按照J(rèn)DBC知識體系及問題分層模型,從教師視角對問題設(shè)計、方向引導(dǎo)、技術(shù)指導(dǎo)及知識總結(jié)四個部分進(jìn)行探討.
①JDBC概念.問題設(shè)計:Java程序員在開發(fā)程序的時候肯定希望自己的方法能適用于不同的數(shù)據(jù)庫,不用重新學(xué)習(xí)新的數(shù)據(jù)庫連接方法,那么有什么辦法能夠辦到?
方向引導(dǎo):在Java中若想實(shí)現(xiàn)某一標(biāo)準(zhǔn)或規(guī)范,可以考慮使用接口.接口的本質(zhì)就是一種標(biāo)準(zhǔn).
技術(shù)指導(dǎo):無(理論學(xué)習(xí))
知識總結(jié):JDBC本質(zhì)上是一組Java的類和接口,用于提供一種訪問數(shù)據(jù)庫的規(guī)范.
②JDBC API.為了達(dá)到較為良好的教學(xué)效果,建議將強(qiáng)化理論學(xué)習(xí)轉(zhuǎn)化為構(gòu)建主義學(xué)習(xí).因此,在講解JDBC API時可以與JDBC開發(fā)步驟相結(jié)合,不單獨(dú)設(shè)計問題.
③JDBC開發(fā)步驟.問題設(shè)計:引用小品臺詞“將大象裝進(jìn)冰箱總共需要幾步?”,將經(jīng)典臺詞融入到JDBC開發(fā)步驟中.
方向引導(dǎo):教師在做方向引導(dǎo)時應(yīng)注意培養(yǎng)學(xué)生知識遷移的能力,將SQL語句發(fā)送給數(shù)據(jù)庫比作“將大象裝進(jìn)冰箱”,進(jìn)而引導(dǎo)學(xué)生學(xué)習(xí)數(shù)據(jù)庫操作的三個重要步驟:注冊驅(qū)動并創(chuàng)建連接、創(chuàng)建并執(zhí)行命令和釋放資源三步.
技術(shù)指導(dǎo):將JDBC API中的常用方法融入開發(fā)步驟中,詳細(xì)講解注冊驅(qū)動、創(chuàng)建連接、創(chuàng)建命令、執(zhí)行命令、處理結(jié)果和釋放資源的技術(shù)實(shí)現(xiàn).
知識總結(jié):Java反射機(jī)制、DriverManager類、Connection 接口、Statement接口、PreparedStatement接口以及ResultSet接口等知識.
④JDBC優(yōu)化.JDBC的優(yōu)化實(shí)際上是一系列的問題,在此部分可以使用問題迭代進(jìn)行講解,講授的內(nèi)容可以包含數(shù)據(jù)庫連接池、數(shù)據(jù)庫配置文件、封裝數(shù)據(jù)庫工具類、DAO、設(shè)計模式等.
問題設(shè)計:每次進(jìn)行數(shù)據(jù)庫操作都需要創(chuàng)建連接并釋放,降低了操作效率,如何解決?將數(shù)據(jù)庫配置信息寫入代碼中,如果需要修改配置信息,則需重新編譯項(xiàng)目,不利于維護(hù),如何解決?在協(xié)同項(xiàng)目開發(fā)中,我們?nèi)绾未_保開發(fā)人員對數(shù)據(jù)庫操作防范的一致性?如何增加程序的可維護(hù)性、可擴(kuò)展性?
方向引導(dǎo):引導(dǎo)學(xué)生學(xué)習(xí)數(shù)據(jù)庫連接池、數(shù)據(jù)庫配置文件、封裝數(shù)據(jù)庫工具類、DAO、設(shè)計模式等開發(fā)技術(shù).
技術(shù)指導(dǎo):教師根據(jù)實(shí)際情況進(jìn)行指導(dǎo).
知識總結(jié):Java集合、properties屬性類、Java反射機(jī)制、函數(shù)重載和覆寫、接口、泛型編程以及序列化等知識.
基于問題解決的JDBC教學(xué)方法是以學(xué)生為中心的教學(xué)方法,通過構(gòu)建主義學(xué)習(xí)模式和研究型教學(xué)方法,將JDBC知識有機(jī)地整合在一起,增加了教學(xué)效果,提升了學(xué)生學(xué)習(xí)效率.除此之外,基于問題解決的JDBC教學(xué)方法可提高學(xué)生的積極性,促使學(xué)生主動學(xué)習(xí)JDBC的相關(guān)知識;當(dāng)學(xué)生設(shè)計的問題解決方案被采用并實(shí)現(xiàn)時,學(xué)生將獲得成就感;在JDBC開發(fā)步驟中,通過知識遷移把案例“將大象裝進(jìn)冰箱”比作實(shí)際的JDBC開發(fā),能幫助學(xué)生掌握J(rèn)DBC的開發(fā)步驟;采用螺旋式問題設(shè)計方式,由淺入深逐步完善JDBC的知識體系;通過與實(shí)際工程問題相關(guān)聯(lián),減小課程學(xué)習(xí)與實(shí)際工程應(yīng)用的差距;在JDBC優(yōu)化部分,通過問題驅(qū)動可以將大量的程序設(shè)計思維傳授給學(xué)生,為后期Java EE企業(yè)級開發(fā)框架的學(xué)習(xí)奠定基礎(chǔ).
基于問題解決的JDBC教學(xué)方法將認(rèn)知主義、行為主義、構(gòu)建主義學(xué)習(xí)理論有機(jī)地結(jié)合在一起,有利于提高學(xué)生解決問題和后續(xù)自主研發(fā)的能力.通過設(shè)計問題、方案設(shè)計和優(yōu)化、技術(shù)實(shí)現(xiàn)和知識總結(jié)固化將JDBC知識融入實(shí)際工程應(yīng)用中,不僅能提高學(xué)生的學(xué)習(xí)效率和學(xué)習(xí)效果,還能為后續(xù)Java EE企業(yè)級開發(fā)框架的學(xué)習(xí)、模塊化程序設(shè)計思維的培養(yǎng)奠定基礎(chǔ).
赤峰學(xué)院學(xué)報·自然科學(xué)版2018年12期