</ogr:COUNTY>
<ogr:FIPS>15001</ogr:FIPS>
<ogr:STATE_FIPS>15</ogr:STATE_FIPS>
</ogr:airprtx020>
</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
</ogr:FeatureCollection>
精通Grails: Grails与遗留数据库(5)
时间:2011-07-29 IBM Scott Davis
现在,创建如清单 6 所示的 restoreUsgsAirports.groovy 脚本。要获取具有名称空间的元素,需要 声明几个 groovy.xml.Namespace 变量。与前面的 restoreAirport.groovy 脚本(清单 3)中使用的简 单的点表示法不同,这里的具有名称空间的元素要用方括号括上。
清单 6. 将 USGS 机场数据恢复到数据库
if(args.size()){
f = new File(args[0])
println f
sql = groovy.sql.Sql.newInstance(
"jdbc:mysql://localhost/trip?autoReconnect=true",
"grails",
"server",
"com.mysql.jdbc.Driver")
FeatureCollection = new groovy.util.XmlParser().parse(f)
ogr = new groovy.xml.Namespace("http://ogr.maptools.org/")
gml = new groovy.xml.Namespace("http://www.opengis.net/gml")
FeatureCollection[gml.featureMember][ogr.airprtx020].each{airprtx020 ->
println "${airprtx020[ogr.LOCID].text()} -- ${airprtx020[ogr.NAME].text()}"
points = airprtx020[ogr.geometryProperty][gml.Point][gml.coordinates].text().split (",")
sql.execute(
"insert into usgs_airports (airport_id, locid, feature, airport_name, state,
county, latitude, longitude) values(?,?,?,?,?,?,?,?)",
[airprtx020[ogr.AIRPRTX020].text(),
airprtx020[ogr.LOCID].text(),
airprtx020[ogr.FEATURE].text(),
airprtx020[ogr.NAME].text(),
airprtx020[ogr.STATE].text(),
airprtx020[ogr.COUNTY].text(),
points[1],
points[0]]
)
}
}
else{
println "USAGE: restoreAirports [filename]"
}
在命令指示符处输入如下信息,将 usgs_airports.xml 文件中的数据插入到新创建的表中:
groovy restoreUsgsAirports.groovy
usgs-airports.xml
验证数据插入成功:从命令行登入 MySQL,确保数据已经就位,如清单 7 所示:
清单 7. 验证数据库中的 USGS 机场数据
$ mysql --user=grails -p -- database=trip
mysql> desc usgs_airports;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| airport_id | bigint(20) | NO | PRI | | |
| locid | varchar(4) | YES | | NULL | |
| feature | varchar(80) | YES | | NULL | |
| airport_name | varchar(80) | YES | | NULL | |
| state | varchar(2) | YES | | NULL | |
| county | varchar(50) | YES | | NULL | |
| latitude | varchar(30) | YES | | NULL
|