基于Java的SQL语句自动评测系统

严超群,李志宏,曹 峻,师闯闯,杨煜馨

(1河北建筑工程学院 河北 张家口 075132)

(2燕山大学 河北 秦皇岛 066004)

SQL语言(Structured Query Language)自动测评系统可以满足教师与学生的需求。对于教师而言可以在平台上发布作业或实验,且能具体看到同学们提交的代码或同学们的作答情况并上传自定义数据库。对于学生而言可以随时查看日常作业的信息,并在此基础上扩展了数据隔离、错误类型、多语句提交等[1]。

本课题意在为学生提供一种SQL语言测试平台,以协助学校教师更好地开展数据库SQL语言实践性练习,从而降低教师实验室管理成本,了解学生的实际问题和信息,更有效地协助老师们掌握学生知识薄弱点,使他们能够完成国内各地老师出的习题,从而拓宽他们的视野,通过建立一个数据共享的实践性MOOC平台,可以充分运用SQL语句改善计算机应用系统的运行品质和工作效率,协助他们更好地了解SQL语言[2]。

SQL语句自动评测系统是一个由计算机自动对SQL语句进行评测的系统,本项目主要分为学生端和教师端。其中学生端分为注册、登录、答题三个板块。教师端分为审核、题目答案设计、成绩统计、行为统计四个板块。该系统通过将教师所给结果与学生执行结果进行比较来确定答案正确与否,若答案不完整,则通过数据结构来进一步进行比较判断。

结构化查询语言是先进的非过程化代码语句,鼓励应用者在更多层的信息架构上操作。它既不要求客户确定对信息的存储方式,也不要求客户知道具体的信息存储方法,所以具备完全差异基础架构的各种数据库系统,能够通过同样的结构化查询语言成为数据输入和信息管理的标准接口[3]。结构化查询语言句子之间可嵌套,这就使得其具有了很大的操作灵活度和极大的使用功能。

SQL能够自主进行数据库系统生命周期中的所有活动,包括确定数据模型、记录信息、创建新数据库系统等各种活动,这也为数据库的系统发展创造了优越的条件,当数据库系统投入工作时,还能按照需求随时逐步调整模型,从而不干扰数据库系统的正常工作,因而使数据库系统产生了良好的可扩充性。

非关系数据模型的数据处理语句通常是面向过程的语句,用它来实现用户请求时,需要指明存取途径。而使用SQL语言实现的统计功能,用户只需指出“做什么样”,而不用指明“怎么样”,存取路径的选定方式和SQL语言的过程由操作系统内部自行实现。这样不但大幅度降低了用户负荷,同时也可以增强数据独立性。

SQL既是自含式句子,也是嵌合式句子。身为自含式编程语言,它还能自主地提供联机互动的应用方法,用户也就能在终端计算机按键上通过注入SQL指令对数据库管理系统加以运用。而身为嵌入型编程语言,SQL句子也可能内嵌到高层程式语言(如C、C、JAVA)中,以供程序员在设计程式时运用。

SQL语言于1974年由Boyce和Chamberlin发明,最先在由IBM有限公司所研发的企业关联信息数据库systeme上实施[4]。因为其具有功能丰富、使用方便灵活、使用简单易懂等明显的优势,受到计算机行业和计算机用户的青睐。1980年10月,由美国标准计量管理局(ANSI)的数据库委员会X3H2批准,将SQL作为关系数据库语言的美国标准,同年公布了标准SQL,此后不久,国际标准化组织(ISO)也做出了类似的决议。

SQL在功能上包括三部分,分别是数据类型定义、数据操作和数据处理[5]。

SQL的基础部分相当于关系代数,它同时也具备了关系代数所没有的很多特性,例如聚集、数据库改进等。这是一种综合性的、通用性的、能力极强的关系数据库编程语言。其特征为:两种使用方法,统一的语法结构[6]。SQL主要有两种应用方法,一种方法是联机交互应用,在这个方法下的SQL实际上是当作自含式语言来应用的;
另一种方法则是直接嵌入到一些高级程序设计语句(如C语句等)中去应用的。前一种方法适用于非计算机专业技术人员应用,后一种方法则适用于专门的计算机科学技术人员应用。虽然方法不同向,但是各种语言的语法结构基本上是一样的。

SQL语句的3种基本形式:

INSERTINTOtable_name(col_1,col_2,col_3,)VALUES(value_1,value_2,value_3…)

DELETEFROMtable_nameWHEREcol_n=value_n

updateable_nameSETcol_1=value_1,col_2=value_2,col_3=value_3WHEREcol_x=value_x

在设计中,让网页元件的名字与底层数据库表的字段命名相同。利用JavaEE中的request.getParameterNames()方式能够读到表单中的每个元件的名字,有了元素名称借助request.getParameter(elementName)方式才能得到该元件的数值。所以,在这三个语言中col_n和value_n就没有了未知数,未知的数据中只留下了table_name,col_x和value_x.可以编写一个方法,传入request对象,再把table_name,col_x,value_x作为参数传入方法,就可自动构造SQL语句了。

2.1 学生端

2.1.1 注册登录板块

学生在使用该平台之前需要实名注册,选择自己的学校学院,填写完相关信息之后可以使用教师所给邀请码进入自己的班级,即可作答教师发布的实验,使用正则表达式对学生注册信息进行判断,查看是否符合要求,将学生信息通过后台写入数据库中分类管理[7]。

其中可以通过手机和邮箱注册账号,手机注册部分使用一条短信业务API平台结合Java代码实现验证码的生成和发送。邮箱注册通过写一个邮箱验证工具类来实现后台向用户邮箱发送验证码完成注册验证。

2.1.2 个人中心板块

在个人中心板块中,有成绩查询模块,可帮助学生了解自己每次做题成绩信息,也可以查看自己所参加的课程。

2.1.3 答题板块

学生可在答题板块中完成教师所布置的实验作业和开放的试题。提交后系统评测答案,给出分数;
其中也包括讨论模块,学生可在讨论模块中讨论自己的心得和疑惑,老师也可以在该模块公布相关信息。其中一个题对应一个讨论区,方便同学查阅。讨论功能使用Ajax实现。

其答题模块中包含了试题模板,使用者可以通过浏览器查询页面,展示相应的数据分析,而不用完成烦琐的大数据分析;
服务器上管理使用者所提供的财务数据是个长久的流程,并不适用于随时呈现,因此针对以上数据分析的特性,根据C/S架构与B/S架构的优缺点,在前台与使用者的通讯中使用了B/S架构,在后台财务数据的管理中也使用了C/S架构。

客户端在网页中使用网上的试卷插件对试卷进行查询、回答、提交,并将试卷回答信息打入资料库中。服务器则是利用在线考试的一个守护进程来监视每一台终端,并接受所有客户在线考试的申请。该过程只进行客户端信息的解析处理,当接到申请时,保护过程使用某个线程来接受信息,再令某个线程分析处理信息,并且读出数据库系统中的相关参数,使用判分过程来管理相应的试题答案。客户端与服务器交互如图1所示。

图1 客户端与服务器的交互

2.2 教师端

2.2.1 班级管理模块

教师可在该模块创建班级,以实现管理学生成绩和发布试题等功能。

教师发布试题后,经系统自动评判实验结果后对学生公布,整个结果公布模块主要是根据评分和教师对结果进行评价两个方面来进行的,学员可根据自我测评成绩向教师在线询问,从而加强师生互动,提高教学效果。

2.2.2 成绩统计模块

统计每位学生的答题正确率、答题时长、提交次数,从而判断试题难易程度,将相关数据形成可视化图表来显示每位同学的答题情况,方便教师了解学生情况。

2.2.3 后台关键技术实现

该过程最主要的任务就是做到自动、真实、精确地评价每一次实验成绩。因此对答案的评估也是基础功能。一种实现方式是直接对比SQL语言,另一种则是直接对比学员成绩和老师的回答。不过,因为SQL语言具有高度灵活性,SQL问题往往能够通过很多种不同的SQL语言实现,但是在使用第一种方法的过程中,需要进行大量的实验,对所有的结果预测也并不算准确,这在某种程度上直接降低了SQL语言的操作性。但是,针对结果进行对比分析,则能够更好地避免这种问题。因此可以通过直接评估回答的方式做出正确评估。回答判定的基本思路是:分别根据所使用的SQL语句和正常的SQL语句,比较二者所给出的结果(预先保持真正的搜索结论不为空),如两个结论相同,则视为回答准确,否则视为回答不恰当。

尽管实际的结果与问题的解决并没有什么区别,但是在整个过程中无法重新排序知识并且对重复的内容进行删减,这种情况下就会产生一种十分严重的问题,针对其进行全错的判断显然也并不合理。因此,在得出结论的过程中,可以采用梯度结论的方式,确保不完全正确结果的判定更加准确,进而充分保障以偏概全的情况得以有效避免。在完成具体任务的过程中,能够借助SQL语言对整个工作进行充分的排序,最后折返时间,在这种情况下由于没有将工作数据的状态进行调整,因此对其他学生的作业成果并不会产生实质性的影响。下文为JAVA代码,以此为例针对关键技术进行说明。

2.3 数据操纵语言的判断

(1)对于查询操作,引入minus关键字比较两者结果是否相同。核心代码如下:

/*拼接两个SQL字符串*/

StringspliceSql1=“(”+sql1+“)”+“minusall”+“(”+sql2+“)”;

recordingList1=samplesDAO.query(conn,spliceSql1);

/*判断查询结果是否相同*/

isEqual=(recordList1.size()==0)?true:false;

(2)对于更新操作,先执行提交的SQL语句,然后查询更新后的记录是否符合预期,如果符合则为正确,否则视为不正确。核心代码如下:

/*执行学生提交的SQL语句*/

iCode=stmt.executeUpdate(userSolution);

/*执行完毕后再次进行查询获取得到结果集record2*/

record2=samplesDAO.query(conn,extraSQL);

/*查看record2中相应记录的值是否被更新成指定的值*/

2.4 数据库编程的判断

(1)相关判断审查SQL语句程序的设计,数据库存储设置。

(2)在线考试的具体接口的实现,如数据库接口、页面设计接口和权限接口设计。

(3)数据编排模块的实现。该板块可以允许创建选择题(包括单项选择题、多项选择题、填空题、程序设计题)。

(4)后台守护程序的设计,页面交互设计等。

应用SQL语言能够使编码工作的整体难度得以充分降低,相关工作人员在开展工作的过程中不必再进行大量繁杂的工作,更不用担心工作过程中会不会出现元件遗漏、元件命名错误以及忘记处理单引号的情况发生。在应用SQL语言的过程中,能够对系统功能进行自动区分,明确逻辑层以及内容层的SQL语言构造。在实际应用的过程中,若重新调整了数据库表,SQL语言的应用促使工作人员只需要进行一个表格内容更新就可以实现大量工作的优化,原本没有写好的逻辑处理不用刻意地进行处理,节省了大量的时间,并且为后续的维护提供了极大的便利。基于自动构造的SQL语言,能够更加高效地优化程序,使操作更加简单,大大减少了工作人员的工作量,在很多领域都有较强的应用价值。但是不得不说,SQL语言的应用也存在一定的弊端,其需要消耗一定的性能,在一些特定的情况下,尤其是元素较多的情况下,这种性能消耗问题更加明显。但是,对于这种条件的限制并没有十分的严格,因此总体上而言,SQL语言的应用价值还是很高的。

综上所述,SQL语言(Structured Query Language)是具备了信息操纵和资料描述等各种特性的数据库语言,由于这种语言具备交互性优点,可给使用者带来很大的方便,现代企业管理系统也可充分运用SQL语言改善计算机应用系统的运行品质和工作效率。SQL语言不但可以单独使用于终端,而且能够作为子语言对其他编程给予有效帮助。SQL可和其他编程语言共同完善软件性能,从而向使用者提供更多更全面的资讯。

猜你喜欢 数据库系统语句答题 答题、拍照、必微博、求关注…… 减了老负担,又练“新技能”当代陕西(2021年16期)2021-11-02挑战答题学生天地(2020年3期)2020-08-25Oracle数据库系统的性能优化研究电子制作(2019年24期)2019-02-23一场全民答题狂欢金桥(2018年3期)2018-12-06熊孩子爆笑答题集学生天地(2018年30期)2018-10-17对分布式数据库系统的安全分析电子技术与软件工程(2016年22期)2016-12-26数据库系统在信息管理中的使用科教导刊·电子版(2016年18期)2016-07-18数据库系统在计算机体系结构中的应用科技视界(2016年3期)2016-02-26我喜欢小学生·多元智能大王(2014年6期)2014-07-09冠词缺失与中介语句法损伤研究外语教学理论与实践(2014年1期)2014-06-15

推荐访问:语句 评测 系统