我的数据库中有一个表,需要更新csv文件(此文件在grails应用程序之外(中的某些行和列的值。csv文件包含大量数据,映射到特定地址和城市。我的申请中的某些地址有错误的城市。所以我想从数据库(grails application db(中获取一个城市,将其与 csv 文件中的城市进行比较,将地址映射到它,并将该地址添加到应用程序数据库中。
最好的方法是什么?
对于 Grails 3,请使用 https://bintray.com/sachinverma/plugins/org.grails.plugins:csv 解析 CSV,请将以下内容添加到 build.gradle。该插件也适用于Grails 2。
repositories {
https://bintray.com/sachinverma/plugins/org.grails.plugins:csv
}
dependencies {
compile "org.grails.plugins:csv:1+"
}
然后在您的服务中使用如下:
def is
try {
is = params.csvfile.getInputStream()
def csvMapReader = new CSVMapReader( new InputStreamReader( is ) )
csvMapReader.fieldKeys = ["city","address1", "address2"]
csvMapReader.eachWithIndex { map, idx ->
def dbEntry = DomainObject.findByAddress1AndAddress2( map.address1, map.address2 )
if ( map.city != dbEntry.city ) {
// assuming we're just updating the city on current entry?
dbEntry.city = map.city
dbEntry.save()
}
// do whatever logic
}
finally {
is?.close
}
这当然是一个简化版本,因为我不知道你是csv还是架构布局。