使用grails中的groovy脚本迁移数据库

时间:2011-10-26 10:07:04

标签: groovy migration

我目前需要在grails中迁移数据库。我用过

def sql =groovy.sql.Sql.newInstance(url,username,password,driver) 

之后我打电话给

sql.eachRow("""select *\
                     from kontakt k join kommunikation c on k.kontakt_id = c.kontakt_id \
                     join kommunikationsmittel cm on c.kommittel_id = cm.kommittel_id \
                     join kommunikationstyp ct on c.komtyp_id = ct.komtyp_id \
                     join adresse a on a.Kontakt_ID = k.Kontakt_ID
                      """) {row->
     }

问题是我可以通过row.Strasse,row.PLZ等访问列名,但是如果有两列,它们在两个不同的表中具有相同的名称。如何访问不同的列? 例如,在'Kommunikationsmittel'表中有一列'Bezeichnung'。在'Kommunikationstyp'中还有一个专栏'Bezeichnung'。我如何通过行访问?

1 个答案:

答案 0 :(得分:2)

是的,如果您有重复的字段名称,则会导致问题。

您的选项是更改选择以使其具体,您可以重命名冲突字段,即:

SELECT k.Strasse as kstrasse, a.Strasse AS astrasse FROM.....

或者,您可以使用行的metaData来获取所有字段,如下例所示:

sql.eachRow( '''...''' ) { row ->
  row.getMetaData()*.columnName.eachWithIndex { name, index ->
    println "$name = ${row[ index ]}"
  }
}

顺便说一下,当您使用\时,SQL中不需要"""个字符,因此行将一直持续到尾随"""