我嘗試使用以下函式在 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, created, company, income, percent]
知道該函式有什么問題或如何以其他方式從檔案中提取列串列嗎?
uj5u.com熱心網友回復:
該檔案可能是在 Windows 中創建的,其中換行符通常是\r\n. 如果是這種情況,也許您也可以嘗試匹配\r:
def create_sql = "\r\n\r\nCREATE TABLE test_table (\r\n\r\nid varchar(5) PRIMARY KEY,\r\ncreated BIGINT,\r\ncompany TEXT,\r\nincome FLOAT,\r\npercent FLOAT\r\n);"
def create_sql1 = create_sql.replaceAll("[\r\n] ", '')
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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/505048.html
上一篇:執行緒安全的檔案更新
