Grails与遗留数据库

http://www.webjx.com/  2009-07-07 15:54:40  来源:网页教学网 

Webjx网页教学提示: Grails 对象关系映射(Grails Object Relational Mapping,GORM)API 是 Grails Web 框架的核心部分之一。“精通 Grails:GORM - 有趣的名称,严肃的技术” 向您介绍了GORM 的基础知识,包括简单的一对多关系。

  注意,该脚本是完全独立于 Grails 框架的。要使用它,就一定要在您的系统上安装 Groovy(参见 参考资料,查找下载与安装说明)。另外,类路径中一定要有 JDBC 驱动程序 JAR。可以在运行脚本时进行指定。在 UNIX® 中,要输入:

  groovy -classpath /path/to/mysql.jar:. backupAirports.groovy

  当然了,在 Windows® 上,相应的文件路径和 JAR 分隔符是不同的。在 Windows 中,则需要输入:

  groovy -classpath c:\path\to\mysql.jar;. backupAirports.groovy

  由于我经常使用 MySQL,所以我将一份该 JAR 的副本保存在了我的主目录(在 UNIX 上为 /Users/sdavis,在 Windows 上为 c:\Documents and Settings\sdavis)中的 .groovy/lib 目录中。当从命令行运行 Groovy 脚本时,该目录中的 JAR 会自动包含在类路径中。

  清单 1 中的脚本将输出写到了屏幕。要将数据保存在一个文件中,可以在运行脚本时重定向输出:

  groovy backupAirports.groovy > airports.xml

  恢复数据

  从数据库中获取出数据仅仅是成功了一半。还要再将数据恢复到数据库中。清单 3 中展示的 restoreAirports.groovy 脚本用 Groovy XmlParser 读入了 XML,构造了一个 SQL insert 语句,并用了一个 Groovy SQL 对象来执行该语句(要了解更多关于 XmlParser的信息,参见 参考资料)。

  清单 3. 从 XML 中恢复数据库记录的 Groovy 脚本

if(args.size()){
   f
= new File(args[0])
   println f

   sql
= groovy.sql.Sql.newInstance(
      
"jdbc:mysql://localhost/aboutgroovy?autoReconnect=true",
      
"grails",
      
"server",
      
"com.mysql.jdbc.Driver")

   items
= new groovy.util.XmlParser().parse(f)
   items.item.each{item
->
     println
"${item.@id} -- ${item.title.text()}"
      sql.execute(
        
"insert into item (version, title, short_description, description,
                 url, type, date_posted, posted_by) values(?,?,?,?,?,?,?,?)",
         [0, item.title.text(), item.shortDescription.text(), item.description.text(),
             item.url.text(), item.type.text(), item.datePosted.text(),
             item.postedBy.text()]
         )
   }
}
else{
   println
"USAGE: itemsRestore [filename]"
}

  要运行该脚本,需要输入:

  groovy restoreAirports.groovy airports.xml

  切记,对于要工作的表之间的关系而言,关系的一 的方面的主键字段一定要与关系的多 的方面的外键字段相匹配。例如,储存于 airport 表的 id 列中的值一定要与 flight 表的 arrival_airline_id 列中的值相同。

  为了确保自动编号的 id 字段被恢复为相同的值,一定要在恢复表前将它们全部删除。这样就可以在下次启动 Grails 重新创建表时将自动编号重置为 0。

  将机场数据安全地备份之后(大概其他表中的数据也已经安全备份了),那么现在您就可以开始试验一些新的 “遗留” 数据了。不懂么?看完下一小节您就会明白了。

共2页: 上一页 [1] 2 下一页
更多

推荐文章