基于grroovy中的SQL文件创建列列表

unftdfkk  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(126)

我尝试使用以下函数在Groovy中创建基于SQL文件的列名列表:

def get_column_names() {
        def create_sql = new File("../create.sql").text.replaceAll("n", '')
        def result = (create_sql =~ /(.*?);/).findAll().first().replace('(', '').split(',')
        return result.stream().map({ x -> x.split(' ')[0] }).toList()
    }

下面是create.sql文件的一个示例:

CREATE TABLE test_table (
id varchar(5) PRIMARY KEY,
created BIGINT,
company TEXT,
income FLOAT,
percent FLOAT
);

但是在执行之后,我得到了以下错误:

java.util.NoSuchElementException: Cannot access first() element from an empty List

另外,当我尝试在groovy控制台中执行相同的命令时,在那里我使用SQL作为字符串,我得到了正确的列表:

def create_sql = """

CREATE TABLE test_table (
id varchar(5) PRIMARY KEY,
created BIGINT,
company TEXT,
income FLOAT,
percent FLOAT
);
"""

def create_sql1 = create_sql.replaceAll("n", '')
def result = (create_sql1 =~ /(.*?);/).findAll().first().replace('(', '').split(',')
def result1= result.stream().map({ x -> x.split(' ')[0] }).toList()

结果:[ID,创建,公司,收入,百分比]

你知道这个函数出了什么问题吗?或者如何以其他方式从文件中提取列的列表?

i7uaboj4

i7uaboj41#

该文件可能是在Windows中创建的,其中换行符通常为\r\n。如果是这样的话,也许您也可以尝试匹配\r

def create_sql = "rnrnCREATE TABLE test_table (rnrnid varchar(5) PRIMARY KEY,rncreated BIGINT,rncompany TEXT,rnincome FLOAT,rnpercent FLOATrn);"

def create_sql1 = create_sql.replaceAll("[rn]+", '')
def result = (create_sql1 =~ /(.*?);/).findAll().first().replace('(', '').split(',')
def result1= result.stream().map({ x -> x.split(' ')[0] }).toList()
println(result1) //[id, created, company, income, percent]

相关问题