我目前需要在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'。我如何通过行访问?
答案 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中不需要"""
个字符,因此行将一直持续到尾随"""