我正在完成一项任务,要求编写一个java程序,该程序在不使用高级库的情况下执行与sql操作相当的操作。因此,它将从inputOps.sql读取一行一行的操作。
CREATE TABLE student(id:integer, gpa:decimal, name:string, family:string,isMale:Boolean)
INSERT INTO student(id,gpa,name,family,isMale) VALUES (50,null,”Ali”, “Hasani”, true)
SELECT id, name FROM student WHERE id=0
然后程序将分析每一行;检查是否存在任何不一致或错误。然后执行该行的操作,最后在log.txt等文件中生成日志。
ERROR: Duplicate column name
family Table student created
ERROR: Table student already exists
ERROR: Invalid table name st
将有第三个文件充当数据库。我已为此任务选择了JSON格式,因此诸如create和insert之类的操作将在JSON文件中保存JSON数组。
["student",["23","3.5","john","johnson","true"]]
关于插入操作的一个问题是用户不必提及每个数据列(id,gpa ...),所以如果用户操作行是:
INSERT INTO student(id,name,family,isMale) VALUES (10,”diane”, “derringer”, false)
程序将理解用户没有为gpa指定值,并且将自动为其为将为插入操作创建的JSON数组的值分配null。 用于使用正则表达式解析输入行我所以使用此代码来解析该行:
Pattern insertPattern = Pattern.compile("(.*)(INSERT)(INTO)(\\w+)(\\()(\\w+)(,)(\\w+)(,)(\\w+)(,)(\\w+)(,)(\\w+)(\\))(VALUES)(\\()(\\d+|null )(,)(\\d+|null)(,)(\\w+|null)(,)(\\w+|null)(,)(\\w+)(\\))(.*)", Pattern.CASE_INSENSITIVE);
Matcher matcher = insertPattern.matcher(inputLine);
然后使用matcher.group()我将创建2个数组; typeArray用于(id,name等)部分,valueArray用于值。 然后程序会检查typeArray的每个对象,使其与一种数据类型(name,gpa)匹配,然后为插入的行创建有效的JSON数组。
这就是问题。我使用的模式只匹配所有提到的类型的行,只有我脑海中的解决方案是为不同类型的行制作不同的模式(一行用于提及3种类型的行当我想制作方法来分类它的错误时,它看起来并不聪明,也应该有问题。
我应该为这个问题做些什么? 有没有办法让正则表达式接受不同的条件?
p.s:我对编程很陌生。