楊廷發,蘭全祥
(攀枝花學院,四川 攀枝花 617000)
JDBC(Java DataBase Connectivity,Java數據庫連接)是Java的重要組成部分,也是Java程序訪問數據庫的主要方式[1].在系統開發中,不論是B/S還是C/S的系統都要進行數據庫連接,JDBC可以實現系統和不同數據庫之間的連接,是Java程序設計課程重點講解的內容之一.但現有的JDBC教學主要采用的是認知主義學習理論(理論教學)和行為主義學習理論(實踐教學),學生在學習過程中大多處于被動學習狀態,學習效果較差.基于問題解決的教學方法根據《華盛頓協議》關于復雜工程問題特征的界定、解決復雜工程問題能力的要求以及工程實踐對高等工程教育人才培養提出的要求對學生復雜工程問題解決能力進行培養[2].基于問題解決的教學方法將理論學習、實踐操作有機地結合在一起,采用問題驅動的方式將知識融入實際工程應用當中,有利于從根本上理解問題、解決問題,培養學生的創新意識,促進學生問題意識的培養,探索精神和創新能力的形成.另外,以基于問題解決的教學方法來構建JDBC的知識體系,有助于學生對Java企業級開發框架的理解,如Hibernate、MyBatis等.
通過對部分高校的課程教學大綱以及一些在線課程的了解,大部分高校和在線課程均會講解JDBC的概念、JDBC的重要接口、JDBC的開發步驟等,少部分課程在講解JDBC的時候會提及到數據庫優化(如數據庫連接池、DAO、配置文件、數據庫工具類等).
在JDBC的概念部分,重點講解JDBC是一些用Java語言編寫的類和接口的集合,是進行數據庫操作的Java API,是Java程序訪問數據庫的一種規范,強調JDBC作為數據庫操作接口的作用.
在講解JDBC的結構部分時,則應突出JDBC的分層結構,使學生對JDBC的結構有清晰、明確的認識,為后續知識講解奠定基礎.JDBC的結構如圖1所示.

圖1 JDBC結構
JDBC API是JDBC知識的核心,只有對API中的方法和作用有較為清晰的認識和學習,學生才能進行Java數據庫開發.在JDBC API講解時,應重點講授 DriverManager、Connection、Statement、PreparedStatement、ResultSet等類和接口,同時對這些類和接口中的常用方法進行講解.
2.2.1 DriverManager
DriverManager主要是用于管理已加載的驅動程序,如各種數據庫的驅動程序.在講解Driver-Manager類時應強調到此類是JDBC開發的前序步驟,并重點講解Class.forName()方法和DriverManager.getConnection()方法.
在方法的講解中應強調Class.forName()利用了Java的反射機制,在進行驅動注冊的時候將拋出ClassNotFoundException 異常;getConnection()方法是DriverManager類的靜態方法,可通過類名直接調用,在獲得連接的時候可能會SQLException異常.
2.2.2 Connection
Connection表示一個和數據庫的連接,在Connection接口中可以創建用于執行SQL語句的命令對象.在講解Connection接口時應強調此接口用于創建命令對象的方法,如創建Statement、Prepared-Statement、CallableStatement命令對象,并講解 close()方法.在講解close()方法的時候應注意訓練學生“有借有還”的習慣,使用了資源一定要釋放.
2.2.3 Statement
Statement用于執行靜態SQL語句并返回其執行結果.在講解Statement接口時,應重點講解Statement執行SQL語句的方法,強調不同的SQL語句要選用不同的執行方法.接口中executeQuery()方法主要用于執行查詢類SQL語句,其返回類型為結果集ResultSet;executeUpdate()方法主要用于執行更新類SQL語句,其返回類型為整型.
2.2.4 PreparedStatement
PreparedStatement表示預編譯的命令對象.在講解過程中應強調PreparedStatement接口與Statement接口的區別,包括它們的優缺點、使用區別以及適用情況.重點講解PreparedStatement接口的易讀性、高效性、安全性.
Statement命令對象在執行帶參數的SQL語句時容易留下SQL注入式攻擊的隱患,Prepared-Statement能夠有效防止該攻擊手段,因此為了進一步結合工程應用實踐,可以適當講解部分網絡安全知識.
2.2.5 ResultSet
ResultSet用于表示執行查詢語句后得到的結果.在講解ResultSet()接口的時候,應重點講解如何遍歷結果集,如何將查詢的數據轉化為Java集合.在講解此部分時可利用圖示的方式加深學生對于結果集處理的印象.
了解并學會JDBC的開發步驟有助于學生快速、準確地進行Java數據庫開發.在JDBC開發步驟的講解過程中,一般將開發步驟分為注冊驅動并建立連接、發送命令并處理結果以及釋放資源三個步驟.
在JDBC開發步驟的教學中應重點講解JDBC每個步驟之間的聯系,加深學生對于開發步驟的印象,并強調最后應當對所有資源進行釋放.
JDBC優化部分作為JDBC的進階學習,有助于培養學生對于復雜工程問題的解決能力[3].JDBC的優化部分可以講解數據庫連接池、數據庫配置信息讀取、封裝數據庫工具類、DAO、工廠設計模式等內容.
數據庫連接池的講解有助于提高學生對于程序優化的能力;數據庫配置信息的讀取有助于培養學生“高內聚,低耦合”的編程思維;封裝數據庫工具類有助于提高學生對程序復用的能力;DAO和設計模式有助于培養學生的模塊化設計思維.
各高校的Java相關課程體系都將JDBC部分納入了教學大綱,并要求學生系統地掌握JDBC基礎知識,能實現簡單的數據庫開發,但在實際的教學過程中仍存在一些問題需要解決.
3.1.1 內容過于基礎,無法與實際工程問題相結合
由于學時和學生能力水平的限制,以教師為中心的教學法通常只講解JDBC的基礎部分,很少會講解到實際工程問題的解決,如JDBC優化部分.然而,簡單、基礎的JDBC知識離實際的工程應用還有很大的差距,容易造成“學”與“用”不能有機結合.
大多數情況下,教學大綱中只要求講解什么是JDBC,JDBC是用來做什么的,怎么用JDBC進行開發.對原理性知識、本質性問題(如“為什么JDBC可以實現與不同數據庫進行連接”,“為什么JDBC是一組類和接口”)等深層次問題并不清楚.也就意味著大部分學生在學習的時候只知道是什么,而不知道為什么.
3.1.3 注重面向過程,忽視整體設計和工程需求
由于傳統教學法采用強化學習理論,不注重模塊化思想,因此在講解時將注重JDBC的實現,而忽略JDBC在整個項目中扮演的角色;注重JDBC的實現過程,而忽略項目的整體設計以及架構.這對于培養學生解決復雜工程問題是相當不利的,學生將很難從單一問題解決能力轉變為復雜問題解決的能力.
3.1.4 知識構建零散,與后續課程知識分離
在高校的課程設置中,同一系列的課程之間是存在一定聯系的.但是在實際教學中,由于師資的不確定性,教學團隊之間溝通的不及時性可能造成前后續課程不連貫,知識零散等問題.
JDBC的后續課程包含Java EE、輕量級企業框架開發等,這些課程中涉及到的Hibernate以及MyBatis等框架的設計思想如果能在JDBC課程中有所體現,那對于學生后續課程的學習將有很大的幫助.
基于問題解決的教學法是根據學習內容設計問題,通過解決問題來獲得相應的問題圖示及相關的概念性理解[4].使用問題解決教學法來講授JDBC內容需要注意圍繞教學內容和教學目標的需要,要滿足復雜工程問題的特征需要,同時問題的復雜性和難度要從易到難、循序漸進[5],以問題為導向的JDBC教學運行模型如圖2所示.
“十二五”期間,通遼市規劃建設800萬畝旱澇保收、高產節水農田,500萬畝飼草料基地,100萬畝設施農業,100萬畝特色種植業基地,500萬畝退耕還林還草工程,2000萬頭只牲畜養殖業基地,實施百億斤糧食加工轉化工程,1000個嘎查村的新農村、新牧區建設工程,每年轉移農村牧區人口10萬人,壓減3萬眼機電井。

圖2 以問題為導向的JDBC教學運行模型
根據文獻[6]可以將問題分為引導性問題、分析性問題、開放性問題,學生在解決這些問題之后分別能達到理解和掌握、應用于實踐、解決工程問題的能力層級.因此,在JDBC的教學中,可以將JDBC知識劃分到不同層級,并采用不同的問題設計,如表1所示.

表1 JDBC教學問題分層設計
基于問題解決的JDBC教學方案實施可大致分為分工職責的確定、具體問題的設計和方案實施.
3.3.1 分工職責
基于問題解決的教學方法主要是以學生為中心進行教學.教師主要負責設計問題、方向引導、技術指導和知識總結等,學生主要任務是根據教師設計的問題進行問題分析、找到問題的解決思路,并在教師的引導和技術指導下對解決方案進行優化和開發實現.教學方案中的分工職責如圖3所示.

圖3 教學方案中的分工與職責
基于問題解決的JDBC教學方法各環節具體實施內容如下:
①教師設計并給出需要解決的問題,學生分析教師給出的問題并設計解決方案;②教師在學生提出解決方案時提供方向引導,指導學生進行方案優化;③在對最終方案進行實現時,教師應提供相應的技術指導,如數據庫連接池的實現、properties屬性文件的讀取以及DAO等設計模式的實現等;④通過具體實現解決了教師給出的問題后,教師應總結開發中所用到的知識,幫助學生對知識進行固化.
3.3.2 具體問題設計及實施
按照JDBC知識體系及問題分層模型,從教師視角對問題設計、方向引導、技術指導及知識總結四個部分進行探討.
①JDBC概念.問題設計:Java程序員在開發程序的時候肯定希望自己的方法能適用于不同的數據庫,不用重新學習新的數據庫連接方法,那么有什么辦法能夠辦到?
方向引導:在Java中若想實現某一標準或規范,可以考慮使用接口.接口的本質就是一種標準.
技術指導:無(理論學習)
知識總結:JDBC本質上是一組Java的類和接口,用于提供一種訪問數據庫的規范.
②JDBC API.為了達到較為良好的教學效果,建議將強化理論學習轉化為構建主義學習.因此,在講解JDBC API時可以與JDBC開發步驟相結合,不單獨設計問題.
③JDBC開發步驟.問題設計:引用小品臺詞“將大象裝進冰箱總共需要幾步?”,將經典臺詞融入到JDBC開發步驟中.
方向引導:教師在做方向引導時應注意培養學生知識遷移的能力,將SQL語句發送給數據庫比作“將大象裝進冰箱”,進而引導學生學習數據庫操作的三個重要步驟:注冊驅動并創建連接、創建并執行命令和釋放資源三步.
技術指導:將JDBC API中的常用方法融入開發步驟中,詳細講解注冊驅動、創建連接、創建命令、執行命令、處理結果和釋放資源的技術實現.
知識總結:Java反射機制、DriverManager類、Connection 接口、Statement接口、PreparedStatement接口以及ResultSet接口等知識.
④JDBC優化.JDBC的優化實際上是一系列的問題,在此部分可以使用問題迭代進行講解,講授的內容可以包含數據庫連接池、數據庫配置文件、封裝數據庫工具類、DAO、設計模式等.
問題設計:每次進行數據庫操作都需要創建連接并釋放,降低了操作效率,如何解決?將數據庫配置信息寫入代碼中,如果需要修改配置信息,則需重新編譯項目,不利于維護,如何解決?在協同項目開發中,我們如何確保開發人員對數據庫操作防范的一致性?如何增加程序的可維護性、可擴展性?
方向引導:引導學生學習數據庫連接池、數據庫配置文件、封裝數據庫工具類、DAO、設計模式等開發技術.
技術指導:教師根據實際情況進行指導.
知識總結:Java集合、properties屬性類、Java反射機制、函數重載和覆寫、接口、泛型編程以及序列化等知識.
基于問題解決的JDBC教學方法是以學生為中心的教學方法,通過構建主義學習模式和研究型教學方法,將JDBC知識有機地整合在一起,增加了教學效果,提升了學生學習效率.除此之外,基于問題解決的JDBC教學方法可提高學生的積極性,促使學生主動學習JDBC的相關知識;當學生設計的問題解決方案被采用并實現時,學生將獲得成就感;在JDBC開發步驟中,通過知識遷移把案例“將大象裝進冰箱”比作實際的JDBC開發,能幫助學生掌握JDBC的開發步驟;采用螺旋式問題設計方式,由淺入深逐步完善JDBC的知識體系;通過與實際工程問題相關聯,減小課程學習與實際工程應用的差距;在JDBC優化部分,通過問題驅動可以將大量的程序設計思維傳授給學生,為后期Java EE企業級開發框架的學習奠定基礎.
基于問題解決的JDBC教學方法將認知主義、行為主義、構建主義學習理論有機地結合在一起,有利于提高學生解決問題和后續自主研發的能力.通過設計問題、方案設計和優化、技術實現和知識總結固化將JDBC知識融入實際工程應用中,不僅能提高學生的學習效率和學習效果,還能為后續Java EE企業級開發框架的學習、模塊化程序設計思維的培養奠定基礎.