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