潘紅玉,劉博夫
(1.湖南師范大學(xué)教育科學(xué)學(xué)院,湖南長沙410081;2.湖南師范大學(xué)信息科學(xué)與工程學(xué)院,湖南長沙410081)
在互聯(lián)網(wǎng)高度發(fā)達的當(dāng)今社會,人們的學(xué)習(xí)已離不開網(wǎng)絡(luò)。除了通過網(wǎng)絡(luò)查詢相關(guān)知識,還可通過內(nèi)容豐富而系統(tǒng)的網(wǎng)絡(luò)課程進行有計劃的自主學(xué)習(xí)。傳統(tǒng)課堂學(xué)習(xí)中,學(xué)習(xí)的內(nèi)容與進度都由教師掌控,學(xué)生只能被動地跟隨,無法按自己的需求個性化地進行學(xué)習(xí)。網(wǎng)絡(luò)課程的出現(xiàn)提供了新的解決方案,學(xué)生可以在線學(xué)習(xí)課堂上沒學(xué)好的內(nèi)容及其他自己感興趣的內(nèi)容,可以檢測自己的學(xué)習(xí)成果,體現(xiàn)了以學(xué)習(xí)者為中心的教育理念,帶來了教育資源共享、學(xué)習(xí)效果提升等好處。
網(wǎng)絡(luò)課程以網(wǎng)頁的形式呈現(xiàn)給學(xué)習(xí)者,網(wǎng)站后端有數(shù)據(jù)庫系統(tǒng)、Web服務(wù)系統(tǒng)等提供支撐。但當(dāng)前多數(shù)網(wǎng)絡(luò)課程設(shè)計上還存在不足。學(xué)習(xí)效果評價與進度管理是網(wǎng)絡(luò)課程學(xué)習(xí)中的重要環(huán)節(jié),大多數(shù)網(wǎng)絡(luò)課程提供的評價與管理功能不夠完善,達不到全面評估、個性化和有針對性指導(dǎo)的目的。因面向的學(xué)生群體龐大,也沒有足夠的教師參與線上管理。這就需要學(xué)習(xí)者本人對學(xué)習(xí)過程與學(xué)習(xí)結(jié)果進行更多的自我管理與評估,或者由家長基于相關(guān)數(shù)據(jù)的查詢與分析參與學(xué)生的學(xué)習(xí)管理。
現(xiàn)有網(wǎng)絡(luò)課程都是將學(xué)習(xí)記錄等數(shù)據(jù)存儲在網(wǎng)站服務(wù)器上,一方面眾多學(xué)習(xí)者的學(xué)習(xí)記錄數(shù)據(jù)繁雜、數(shù)據(jù)量大,容易造成服務(wù)器負(fù)擔(dān)過重,因此很多網(wǎng)絡(luò)課程都沒有保存詳細(xì)的用戶學(xué)習(xí)記錄,即使保存了也不會全部向用戶開放。不同的網(wǎng)絡(luò)課程網(wǎng)址不同,數(shù)據(jù)所存的服務(wù)器可能不同,因此不同網(wǎng)絡(luò)課程的后端數(shù)據(jù)很難整合,學(xué)習(xí)者不能輕松獲取歷史學(xué)習(xí)記錄與統(tǒng)計數(shù)據(jù),不方便進行統(tǒng)一的學(xué)習(xí)進度管理與相應(yīng)的時間規(guī)劃管理。
若在瀏覽器端將學(xué)習(xí)記錄保存到本地SQLite數(shù)據(jù)庫,可有效地改善這種狀況。學(xué)生的學(xué)習(xí)記錄與測評數(shù)據(jù)可存儲在本地SQLite庫文件中,學(xué)生可方便查看,家長也可調(diào)用查看,而不需要登錄不同的網(wǎng)址從分散的信息源進行查詢統(tǒng)計。
SQLite 不同于傳統(tǒng)數(shù)據(jù)庫系統(tǒng),它最大的優(yōu)點是小巧,最小情況下只需占用幾十K字節(jié)的存儲空間,數(shù)據(jù)庫以文件的形式保存,不需要安裝復(fù)雜的管理系統(tǒng)就能使用[1]。它被眾多編程語言支持,尤其是得到JavaScript 腳本語言的支持。在PC機瀏覽器以及手機瀏覽器中通過JavaScript可實現(xiàn)讀寫SQLite,手機中的App、PC機中的應(yīng)用程序也可以訪問。SQLite得到各種嵌入式設(shè)備支持,成為優(yōu)秀的嵌入式數(shù)據(jù)庫[2]。
SQLite 是實現(xiàn)了零配置、無服務(wù)端和事務(wù)處理的輕量型SQL數(shù)據(jù)庫。SQLite單線程讀寫性能與MySQL相比并不遜色。SQLite 多個連接可以并發(fā)操作,允許從多個進程或線程訪問,但是同一時間只允許一個寫操作[3]。
SQLite 支持事務(wù)處理。事務(wù)(Transaction)是對數(shù)據(jù)庫執(zhí)行的一系列操作,是按邏輯順序完成的一組操作語句。如:在數(shù)據(jù)庫不同表中分別添加記錄、更新某些字段數(shù)據(jù)、刪除另一表中的記錄等,它們即可構(gòu)成一個事務(wù)。這些操作通常具有邏輯相關(guān)性,如記錄某一學(xué)習(xí)內(nèi)容的成績,同時應(yīng)將待學(xué)習(xí)內(nèi)容數(shù)減一。事務(wù)機制可確保事務(wù)中的新建、修改、刪除等操作都成功完成或都被取消,以保證數(shù)據(jù)的完整性和一致性[4]。
SQLite 支持SQL92 標(biāo)準(zhǔn)的大多數(shù)命令,如最常用的select查詢、insert 插入、update 更新、delete 刪除四大操作。與其他數(shù)據(jù)庫如SQL Server 相比,SQLite 的操作是與程序共用同一進程進行的,SQL Server 則需要單獨的數(shù)據(jù)庫服務(wù)進程提供相應(yīng)服務(wù)[5]。SQLite以文件形式提供服務(wù),節(jié)省了網(wǎng)絡(luò)開銷,降低了數(shù)據(jù)傳輸時延。
HTML5 中引入了Web SQL DBTABASE,其為SQLite 數(shù)據(jù)庫的訪問提供了三個核心API函數(shù),可在網(wǎng)頁腳本語言中使用這些函數(shù)。
一是opendatabase 打開數(shù)據(jù)庫函數(shù),可使用現(xiàn)有數(shù)據(jù)庫或創(chuàng)建新的數(shù)據(jù)庫。其四個參數(shù)分別是數(shù)據(jù)庫名、版本、數(shù)據(jù)庫描述、數(shù)據(jù)庫尺寸。
二是transaction 事務(wù)函數(shù),用于組織事務(wù)中的SQL 功能語句并控制事務(wù)提交或回滾。
三是executeSql 執(zhí)行SQL 語句函數(shù)。executeSql 有四個參數(shù),第一是操作數(shù)據(jù)庫的SQL 語句,第二是SQL 語句中使用的參數(shù)的數(shù)組,第三是語句操作成功調(diào)用的函數(shù),第四是語句操作失敗調(diào)用的函數(shù)。
在新建的網(wǎng)絡(luò)課程中增加對本地SQLite 數(shù)據(jù)庫的支持。對原有網(wǎng)絡(luò)課程按照相對一致的規(guī)范進行改造,增加對SQLite數(shù)據(jù)庫的支持。這可通過為頁面添加JS腳本代碼實現(xiàn),也可設(shè)計通用的瀏覽器擴展插件實現(xiàn)。
在網(wǎng)絡(luò)課程中,將有利于學(xué)習(xí)者自我評價和學(xué)習(xí)進度管理的信息保存到本地SQLite數(shù)據(jù)庫中。如學(xué)習(xí)進度信息、測評結(jié)果信息等。
設(shè)計適合PC 或手機終端使用的應(yīng)用程序,采用主流的開發(fā)工具,如C#、Python、Android等,對各網(wǎng)絡(luò)課程產(chǎn)生的學(xué)習(xí)記錄與測評數(shù)據(jù)進行查看、采集與統(tǒng)計,為學(xué)習(xí)者開展自我學(xué)習(xí)評價與學(xué)習(xí)管理提供便利,為家長了解學(xué)生學(xué)習(xí)情況提供便利。
目前市場占有率最高的瀏覽器Google Chrome 對SQLite 數(shù)據(jù)庫提供了很好的支持。Microsoft Edge 瀏覽器采用Chrome內(nèi)核后,也能很好地支持SQLite數(shù)據(jù)庫。
使用Google Chrome瀏覽器時,網(wǎng)頁中創(chuàng)建的SQLite數(shù)據(jù)庫缺省路徑為:C:UsersAdministratorAppDataLocalGoogleChromeUser DataDefaultdatabases。
使用Microsoft edge瀏覽器時,網(wǎng)頁中創(chuàng)建的SQLite數(shù)據(jù)庫缺省路徑為:C:UsersAdministratorAppDataLocalMicrosoftEdgeUser DataDefaultdatabases。
上述目錄中databases.db是匯總數(shù)據(jù)庫文件,其中的表da‐tabases記錄了各個網(wǎng)站產(chǎn)生的數(shù)據(jù)庫文件情況,每條記錄對應(yīng)一個數(shù)據(jù)庫文件,id 字段保存唯一的記錄號,記錄號就是對應(yīng)的數(shù)據(jù)庫文件名稱(數(shù)據(jù)庫文件名采用無擴展名的形式)。ori‐gin來源字段保存網(wǎng)站的網(wǎng)址與端口號,如:http_localhost_8080代表的是http://localhost:8080這個地址。每個網(wǎng)站都有一個獨立的二級目錄保存其數(shù)據(jù)庫文件,origin 字段的值就是其目錄名。name 字段保存數(shù)據(jù)庫名稱,description 字段保存數(shù)據(jù)庫文件的說明,estimated_size 字段保存表空間的估計大小。表結(jié)構(gòu)見圖1。
其中的file__0 子目錄是本地磁盤中網(wǎng)頁文件在雙擊運行后產(chǎn)生的數(shù)據(jù)庫文件所保存的位置。
SQLite數(shù)據(jù)庫可以用SQLiteStudio、SQLiteSpy等軟件打開,并對其進行管理,可查看修改數(shù)據(jù)表的結(jié)構(gòu)與記錄。SQLit‐eStudio是開源且跨平臺的管理工具,沒有安裝過程解壓縮后即可使用。因SQLiteStudio中默認(rèn)數(shù)據(jù)庫擴展名為.db或.db3等,而瀏覽器產(chǎn)生的數(shù)據(jù)庫文件沒有擴展名,因此在add database選擇數(shù)據(jù)庫文件打開時,要選擇all files 這一類型,才能找到對應(yīng)數(shù)據(jù)庫文件。
SQLiteStudio 軟件在表結(jié)構(gòu)操作界面中,雙擊已有字段可查看修改該字段屬性,在已有字段下的空白位置雙擊可添加新字段。當(dāng)瀏覽器等其他進程正在獨占寫數(shù)據(jù)庫時,SQLiteStu‐dio 或其他應(yīng)用程序可能無法打開該數(shù)據(jù)庫,此時可復(fù)制生成數(shù)據(jù)庫的副本用于數(shù)據(jù)的查看與統(tǒng)計處理。
3.3.1 創(chuàng)建SQLite數(shù)據(jù)庫并插入學(xué)習(xí)記錄
不同學(xué)習(xí)網(wǎng)站同名的數(shù)據(jù)庫保存在不同的子目錄,同一網(wǎng)站不同名的數(shù)據(jù)庫保存為不同的文件。數(shù)據(jù)庫文件名都是通過匯總表中的唯一記錄號來標(biāo)識。
為網(wǎng)絡(luò)課程或?qū)W習(xí)網(wǎng)站創(chuàng)建名為LearnDb 的SQLite 數(shù)據(jù)庫。調(diào)用openDatabase 方法,這個方法在數(shù)據(jù)庫已存在時為打開數(shù)據(jù)庫,在數(shù)據(jù)庫不存在時新建數(shù)據(jù)庫文件。JS代碼如下:
var db=openDatabase(′LearnDb′,′1.0′,′Course Db′,1024*1024);
if(!db){ console.log("數(shù)據(jù)庫操作失敗!");}
else { console.log("數(shù)據(jù)庫操作成功!");}
創(chuàng)建或打開數(shù)據(jù)庫成功后,調(diào)用transaction函數(shù)執(zhí)行事務(wù),用于數(shù)據(jù)表的創(chuàng)建和數(shù)據(jù)的一系列插入操作。事務(wù)機制能控制事務(wù)中的插入、更新、刪除等操作都生效或都被取消。啟動事務(wù)并獲取當(dāng)前日期時間的代碼如下:
db.transaction( function(tx){ now=new Date();
var strtime = now.toLocaleDateString() + " " + now.toLocale‐TimeString();
調(diào)用executeSql 執(zhí)行SQL 語句函數(shù)創(chuàng)建名為“l(fā)earnRecord”的數(shù)據(jù)表,包含id 記錄號、title 主題、content 內(nèi)容、score 分?jǐn)?shù)、time 時間字段,其中TEXT 文本類型也可使用VARCHAR 可變長度字符類型。代碼如下:
tx.executeSql(′CREATE TABLE IF NOT EXISTS learnRe‐cord (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT,content TEXT,score REAL,time TEXT)′,[],
function(tx,result){console.log(′表操作成功′);},
function(tx,error) { console.log (′表操作失敗:′ + error.mes‐sage);});
上面語句參數(shù)第二項為空數(shù)組,第三項為語句成功調(diào)用的回調(diào)函數(shù),第四項為語句失敗調(diào)用的回調(diào)函數(shù)。
創(chuàng)建表格成功后,再根據(jù)學(xué)習(xí)者的不同學(xué)習(xí)行為,調(diào)用ex‐ecuteSql 方法執(zhí)行插入語句操作,在數(shù)據(jù)庫表格中加入相應(yīng)學(xué)習(xí)記錄,相關(guān)代碼如下:
tx.executeSql(′INSERT INTO learnRecord (title,content,time)VALUES (?,?,?)′, ["結(jié)束單元測試","第四單元:數(shù)列的學(xué)習(xí)",strtime],
function(tx,result){console.log(′插入記錄成功′);},
function(tx,error){console.log(′插入記錄失敗′);});
tx.executeSql(′INSERT INTO learnRecord(title,content,score,time)VALUES(?,?,?,?)′,["單元測試成績","第四單元:數(shù)列的學(xué)習(xí)",87,strtime],
function(tx,result){console.log(′記錄分?jǐn)?shù)成功′);},
function(tx,error){console.log(′記錄分?jǐn)?shù)失敗′);});
上述代碼中的insert 語句替換成update、delete 等其他SQL語句,即可實現(xiàn)記錄的更新、刪除等操作,完成數(shù)據(jù)的各項管理維護任務(wù)。
3.3.2 讀取SQLite數(shù)據(jù)記錄
調(diào)用transaction 函數(shù),再調(diào)用executeSql 函數(shù)執(zhí)行查詢語句,可以從SQLite數(shù)據(jù)庫表中讀取數(shù)據(jù),代碼如下:
db.transaction(function(tx){
tx.executeSql(′SELECT*FROM learnRecord′,[],
function(tx,rs){
for(var i=0;i document.getElementById("div1").innerHTML+= rs.rows.item(i).title+""+rs.rows.item(i).time+" function(tx,err){ console.log ("執(zhí)行查詢出錯"+err.mes‐sage);});}); 其中rs.rows代表查詢得到的結(jié)果集中的所有記錄行集合,item(i)代表第i 條記錄,title 與time 分別為主題與時間字段,同理可訪問各記錄的其他字段,修改select 語句可實現(xiàn)數(shù)據(jù)的查詢與統(tǒng)計功能。 嵌入式數(shù)據(jù)庫的引入與應(yīng)用,是對網(wǎng)絡(luò)課程功能的拓展,在不增加網(wǎng)絡(luò)流量負(fù)擔(dān)和服務(wù)端存儲壓力的情況下,保留了更多個性化學(xué)習(xí)數(shù)據(jù)。這些數(shù)據(jù)能服務(wù)于學(xué)習(xí)者,幫助其發(fā)現(xiàn)問題,快速獲得成長。統(tǒng)計后的數(shù)據(jù)也可再收集到服務(wù)端,為網(wǎng)絡(luò)課程的升級提供依據(jù)。該技術(shù)具有良好的應(yīng)用前景。
";}},4 結(jié)束語