基于SQLite的数据库原理自主实验平台设计

2016-12-05 10:08黎孟雄郭鹏飞
实验技术与管理 2016年11期
关键词:原理语法数据库

黎孟雄, 郭鹏飞

(1. 江苏师范大学连云港校区 数学与信息工程学院, 江苏 连云港 222006;2. 连云港师范高等专科学校 数学与信息工程学院, 江苏 连云港 222006)



基于SQLite的数据库原理自主实验平台设计

黎孟雄1,2, 郭鹏飞2

(1. 江苏师范大学连云港校区 数学与信息工程学院, 江苏 连云港 222006;2. 连云港师范高等专科学校 数学与信息工程学院, 江苏 连云港 222006)

为了解决传统的数据库原理实验教学及一般的数据库在线实验软件所面临的一些问题,设计和实现了基于SQLite的数据库原理的自主实验平台。该平台的总体结构包括SQL主题学习模块、SQL实验练习模块、智能答疑模块和实验过程监管模块。详细阐述了平台的体系结构、核心功能及其实验平台的构建、SQL语法检查、FAQ自动采集和实验过程监管等关键技术,给出了关键函数调用程序。

数据库原理课程; 自主实验平台; SQLite

数据库是信息化建设的基石,几乎所有的计算机应用软件都构建于数据库系统之上。因此,“数据库原理”课程已成为高校计算机、信息管理、电子商务等专业的必修课,也是一门理论和实践结合非常紧密的数据库系列基础课。在课程实验环节,重点是结构化查询语言(structured query language,SQL)的上机练习。SQL是最重要的非过程化关系数据库操作语言,用于数据存取以及查询、更新和管理关系数据库系统。

尽管SQL具有集数据定义、数据操纵、数据控制等功能于一体,语言风格统一和简洁易学的特点,但在“数据库原理”实际教学中却存在理论和实践脱节的现象,学生上机操作总是感觉无所适从[1]。除教学方法问题外,实验课时太少、课外实验缺乏监管和指导也是影响学生对理论知识的理解、实践知识转化的重要原因。

为了突破传统实验教学受时间、场地、软硬设备和师资条件的制约,一些高校开发了基于Web的数据库在线实验环境[2-3]。这些实验平台虽然在数据库课程实验教学中取得了较好的效果,但要求学生在实验时必须实时联网,一旦断网离线则不能使用。为了给学生提供一个更加方便、易用的实验环境,笔者设计了基于SQLite的数据库原理自主实验平台。该平台软件为绿色版且无需安装,解压后可直接使用;软件压缩包体积小,也方便学生用U盘、手机随身携带。

1 SQLite及其优点

SQLite是一款开源的轻量级嵌入式关系型数据库管理系统,完全支持T-SQL标准语言,支持事务(transaction)处理、触发器(trigger)和复杂查询[4]。SQLite数据库系统本身采用C语言编写,体积非常小,包含在一个不到500 KB的C语言库中。SQLite的数据库引擎不像Oracle、Sybase等大型Client/Server数据库管理系统的引擎那样使用应用程序与之通信的独立进程;相反,SQLite库可以被编译到应用软件中,成为程序的内嵌模块,应用程序可以方便地调用API函数来使用SQLite的功能。与进程间通信相比,在数据处理的速度上API调用效率更高。

除了小巧、高效外,SQLite还有以下几个优点:

(1) 跨平台。SQLite除了支持所有主流计算机操作系统如Max OS、Linux、Windows和Unix之外,甚至很多手机、平板电脑的移动操作系统同样可以运行,例如Android、iOS、Windows Phone、Symbian等。

(2) 多语言接口。SQLite提供了为数众多的编程语言接口,例如C/C++、Java、Python、dot Net、Ruby、PHP、Perl、Common Lisp和Smalltalk等,因而受到很多开发者的喜爱。据SQLite的官方网站称,SQLite是目前使用最广泛的数据库系统,就数量而言,已经超越Oracle、Microsoft Sql Server、Sybase、IBM DB2、My Sql和Microsoft Access的总和。

(3) 独立性。SQLite的核心引擎不依赖任何第三方软件,使用它简单、灵活、可靠。基于SQLite的应用软件也完全可以做到无需安装和管理配置。

2 平台体系结构

在基于SQLite的数据库原理自主实验平台上练习SQL语句的时候,除了能像在真实的大型数据库管理系统里一样执行并显示结果外,系统还具有精确的错误诊断功能,可以探测并定位到SQL程序运行过程中的错误知识点,根据需要给出错误原因和相应的SQL命令范例。另外,系统平台会对学生用户全部上机实验过程进行记录,并在联网的时候反馈给教师,起到一定的实验监管作用。

该平台的总体结构包括4个核心功能模块:SQL主题学习模块、SQL实验练习模块、智能答疑模块和实验过程监管模块。

(1) SQL主题学习模块。实验平台有丰富、齐全的保存在SQLite本地数据库里的主题学习资源,包括数据库和表的创建、使用,数据记录的增、删、改操作,简单查询和复杂查询,SQL高级应用,索引和视图,存储过程和触发器,安全性和完整性管理,数据备份和转换等。

(2) SQL实验练习模块。练习模块是实验平台最重要的模块,分自由练习部分和任务分配部分。自由练习部分是学生为了验证自己的想法、思路去实现某个数据库操作或功能而编写、测试SQL程序;任务分配指的是学生必须完成的SQL相关知识的实验练习,该模块实验目的、要求和内容都非常明确,分配给学生的实验题目是随机生成的。

(3) 智能答疑模块。在数据库原理的实验过程中,大部分学生遇到的实验难点主要是些常规问题,所以实验平台设计了FAQ(frequently asked questions)知识库。为了降低学生检索问题的难度,实验平台还嵌入了智能导学机器人,以仿腾讯QQ、微软MSN等传统即时消息软件的会话方式来构建人机互动和构建智能答疑环境[4]。导学机器人模拟任课教师对学生进行即时指导的聊天式答疑风格,能使学生在枯燥乏味的实验环境中体验学习的乐趣。

(4) 实验过程监管模块。学生每一次进入实验平台上机练习的全过程,包括起始时间、结束时间、有效实验时间、实验进度、任务分配、实验结果等,都会被自动记录在SQLite数据库中,并在随后的时间里一旦检测到计算机联网,即会把实验过程监管记录发送给任课教师。

3 关键技术的设计

3.1 实验平台的构建

数据库原理自主实验平台基于Microsoft .NET框架,采用C#语言开发,其开发环境和运行部署的SQLite数据库驱动都只需要一个System.Data.SQLite.dll动态链接库文件即可,该程序符合ADO.NET的规范,并且支持Visual Studio的可视化表设计器。

由于所有的SQL主题学习资源、任务实验练习试题和FAQ知识库全部保存在本地SQLite数据库文件中,为了避免数据的完整性和安全性受到影响,学生实验时的所有数据操作都是基于另外一个单独的专用练习数据库,并且设计了基于多级角色的安全访问功能[5]。

实验平台的软件界面主要由SQL主题学习模块的资源分类呈现单元和实验练习模块的SQL程序执行单元构成,核心在SQLite的数据库操作,关键函数调用如下:

CSqlite csqlite = new CSqlite(@″D:sqlite3dbStudent.db″);

//创建数据库对象,参数为数据文件路径

csqlite.Open(); //打开数据库

csqlite.BeginTransaction(); //开启事务

public DataTable ExecuteQueryTable(string sqlCmd); //执行SQL命令,并返回DataTable

public int ExecuteNonQuery(string sqlCmd); //执行SQL命令,返回影响行数

csqlite.Commit(); //提交事务

csqlite.Rollback(); //回滚事务

csqlite.Dispose(); //关闭数据库

基于SQLite的数据库原理自主实验平台的功能界面如图1所示。

图1 数据库原理自主实验平台功能界面图

3.2 SQL语法检查

实验平台采用开源语法分析器ANTLR对SQL源程序进行语法检查和诊断。ANTLR可以接收上下文无关的语法规则描述,通过解析用户定义的语法规则来识别输入语句,并根据需要自动生成多种语言的源代码程序,包括Java、Python和C#等[6]。作为翻译程序的一部分,ANTLR可以允许使用简单的操作符和动作来表达语法规则,从而较为轻松地创建抽象语法树和产生最终输出信息。

ANTLR的SQL语法检查流程分为词法分析和语法分析两个步骤。

在词法分析阶段,需要先定义SQL程序中的各种关键字、标识符和操作符,如create、select、from、where、=、<>等词元(token),然后对SQL程序进行预处理,例如过滤空格、回车、换行及注释等,再由词法分析器(lexer)把输入的程序代码文本的字符流识别成离散的Token序列[7]。

在语法分析阶段,语法分析器(parser)的解析程序根据预先定义的SQL语法规则,对Token序列进行语法分析,建立层次化的抽象语法树(AST),并在AST对象的基础上配合元数据管理系统进行语义检查工作。语义检查主要是进行表实体、属性及其关系检查。

对SQL语法规则的准确描述是实现其语法检查的关键,以查询语句为例,语法规则表达式如下:

tokens {SQL_STATEMENT;SELECT_LIST;TABLE_REFERENCE_LIST;WHERE_CONDITIONG;SUBQUERY;}

start_rule:(sql_statement)*EOF;

sql_statement:sql_command(SEMI)?

{#sql_statement = #([SQL_STATEMENT,″sql_statement″],#sql_statement);}

select_expression:

″select″ (″all″|″distinct″) ? select_list

″from″ table_reference_list

(″where″ where_condition) ? (connect_clause) ? (group_clause) ?

((set_clause) => set_clause) ? ((order_clause) => order_clause) ?

((update_clause) => update_clause);

select_list:

((displayed_column) => displayed_column (COMMA displayed_column)*

| LBRACKET table_name DOT ASTERISK RBRACKET)

{#select_list = #([SELECT_LIST,″select_list″]),#select_list;};

3.3 FAQ自动采集

知识资源丰富的高质量FAQ是实现智能答疑的基础。为了快速、高效地构建“数据库原理”FAQ,实验平台利用垂直网络蜘蛛(spider)进行自动采集,具体步骤如下。

首先,根据“数据库原理”课程生成所有知识点的主题关键词表,Spider按关键词依序从指定网站“百度知道”抓取主题相关的网页集。“百度知道”是由百度自主研发、基于搜索的互动式知识问答分享平台,提供了众多领域的海量问答资源。针对“百度知道”平台中“数据库原理”课程关联知识的分布式特点,Spider采用增量式采集和最佳优先算法,在提高查全率的同时,尽量提高知识资源的搜索效率。

然后,把经过PageRank算法排序的抓取网页集作为样本进行去噪、解析成Dom页面集[8],并根据FAQ语义数据模型对Dom页面集进行标记,建立页面信息内容与FAQ知识对象的对应关系。网页去噪的基本方法是利用各种通用的特征来区分有效正文内容和页眉、页脚、广告等其他信息[9]。其中最常用的特征是链接文字比率。FAQ使用HtmlAgilityPack把HTML转换为Dom树,再对每个节点计算链接文字比率,如果高于25%就把该节点去掉。

最后,直接采集Dom树页面子节点的有效正文内容,存入FAQ知识库并建立其数据库文档的倒排索引,包括正向索引和反向索引。由于倒排索引的大小可能和文档内容本身差不多,尤其当文档数量较多时,为了节省数据库存储空间,可以采用压缩格式存储倒排索引。

Spider在“百度知道”站点实现网页自动抓取的主要流程如下:

Static List todo = new List(); //要访问的链接

Static List visited = new List(); //已经访问过的链接

Static List startpointAdress =http://zhidao.baidu.com/; //把百度知道作为种子站点

Public void Crawler(){ //网络蜘蛛的开始点

RequestSite(startpointAdress); //访问种子站点

While (doto.Count > 0 ) { //如果有需要遍历的链接,则逐个遍历}}

Todo.AddRange(GetLinks(s)); //增加链接到队列尾部

todo GetLinks(string htmlpage){//通过正则表达式提取链接}

3.4 实验过程监管

严格的实验过程监管可以对学生形成正面导向和牵引的力量;基于实验过程的考核评价方法能对学生起到一定的鞭策和督促作用[10]。因此,数据库原理自主实验平台设计了实验过程监管模块。学生每一次实验的登录时间、结束时间、有效实验时间、实验练习的SQL程序及其运行状态等实验过程数据信息,甚至包括主题资源的学习进度都会被自动记录在SQLite数据库中。当实验平台检测到计算机联网时就会在后台通过电子邮件方式自动把实验过程监管记录发送给任课教师。

C#中一般有两种方法来判断计算机是否连接互联网。第一种是通过调用cmd中的ping命令,分析输出信息来确定网络是否连接;第二种是调用win32的API函数InternetGetConnectedState()返回本地系统的网络连接状态。因为第一种方式受到ping时延的影响,在某些不支持ping的地址或者网段甚至不可用,所以实验平台采用第二种方法,语法为BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved)。其中参数lpdwFlags返回当前网络连接状态,dwReserved是保留参数,设置为0即可。

另外,由于Microsoft .NET类库中的SmtpClient类已经对SMTP协议实现了完美封装[11-12],当系统平台在发送电子邮件的时候只需要调用SmtpClient类的相关方法和函数,非常方便。

邮件发送方法:

private void SendMail(SmtpClient client,MailAddress from,string p, MailAddress to, MailMessage message) {

client.UseDefaultCredentials = false;

client.Credentials = new NetworkCredential(from.Address, p);

client.DeliveryMethod = SmtpDeliveryMethod.Network; //邮件通过网络发送到服务器

client.Send(message);

message.Dispose(); //及时释放占用资源 }

其中MailAddress用于提供发件人和收件人的邮件地址,MailMessage用于提供邮件的信息,包括主题、内容、附件、信息类型等。

4 结语

基于SQLite的数据库原理自主实验平台用于实验教学,学生可以不受时间、地点、网络环境的限制,非常方便地独立完成SQL的实验操作。该实验平台软件界面友好、功能实用,不仅能对SQL程序实现精确的语法检查和诊断,还可以自动生成实验报告。尽管智能导学机器人在智能答疑环节能通过中文分词和问句相似度计算、从FAQ知识库中推荐最佳答案,但未能根据学生的学识水平进一步予以个性化的主题资源学习导航。所以,基于SQLite的数据库原理自主实验平台需要进一步完善学生模型和扩充学习资源库,以便机器人能根据学生的学习能力和实验水平进行差异化导学,使实验平台成为学生理想的“数据库原理”学习平台。

References)

[1] 黄德才,龚卫华.“数据库原理及应用”实验模块的组织原则与教学实践[J].计算机教育,2009(10):169-171.

[2] 郭东伟,于明光,刘淼.数据库应用实验在线自动测评环境[J].实验室研究与探索,2011,30(5):60-63.

[3] 刘文菊,柯永振,时珍全,等.基于Web的数据库远程自主实验平台[J].现代教育技术,2010,20(3):132-134.

[4] 黎孟雄.基于IM的智能导学机器人的研究与设计[J].现代教育技术,2013,23(1):97-101.

[5] 白晋国,胡泽明,孙红胜.基于RBAC模型多级角色的SQLite3安全访问控制[J].计算机系统应用,2015,24(5):177-182.

[6] 王海燕,杨鹤标.基于ANTLR的SQL语法分析策略与实现[J].计算机应用与软件,2013,30(11):68-70.

[7] 孙兆玉,朱鸿宇,黄宇光.一种SQL语法分析的策略和实现[J].计算机应用,2007,27(6):18-23.

[8] Richardson M, Domingos P. The intelligent surfer: probabilistic combination of link and content information in PageRank[J].Advances in Neural Information Processing Systems,2001,14:1441-1448.

[9] 吴思竹,张智雄.基于网页特征识别的噪音网页过滤方法研究[J].情报理论与实践,2011,34(4):111-114.

[10] 王鲁云,张明君,王颖,等.实验课教学过程管理模式的改革与实践[J].实验技术与管理,2013,30(6):102-104,117.

[11] 李福红,于九九.C#开发邮件工具[J].电脑编程技巧与维护,2013(3):30-36.

[12] SmtpClient[EB/OL].[2016-03-15].https://msdn.microsoft.com/zh-cn/library/system.net.mail.smtpclient(VS.80).aspx.

Design of self-experimental platform based on Database Principle of SQLite

Li Mengxiong1,2, Guo Pengfei2

(1. School of Mathematics and Information Engineering, Jiangsu Normal University, Lianyungang 222006, China;2. School of Mathematics and Information Engineering, Lianyungang Normal College, Lianyungang 222006, China)

In order to solve the problems faced by the traditional experimental teaching of Database Principle and its common online experimental software,this paper designs and completes a self-experimental platform based on the Database Principle of SQLite. The general structure of the platform includes SQL-subject learning module, SQL experimental exercise module, intelligent question answering module and experimental process supervision module. The key technologies for the systematic structure of this platform, its core function, formation,SQL grammar checking,FAQ automatic collection and experimental processing supervision are described in detail, and the key function calling programs are provided.

Database Principle course; self-experimental platform; SQLite

10.16791/j.cnki.sjg.2016.11.039

2016-05-15

教育部高职高专教育规划课题(JZW590112052);江苏省教育科学“十二五”规划课题(D/2015/03/085)

黎孟雄(1973—),男,湖南邵阳,硕士,副教授,主要研究方向为数据挖掘和教育信息化.

E-mail:jslyglmx@163.com

TP311.13;G642

A

1002-4956(2016)11-0157-04

猜你喜欢
原理语法数据库
了解咳嗽祛痰原理,有效维护健康
平均场正倒向随机控制系统的最大值原理
跟踪导练(二)4
Book 5 Unit 1~Unit 3语法巩固练习
化学反应原理全解读
数据库
通信原理教学改革探索
数据库
数据库
数据库