首页 / 更多教程 / sql – 将结果行强制转换为对象
sql – 将结果行强制转换为对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了sql – 将结果行强制转换为对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1288字,纯文字阅读大概需要2分钟。
内容图文
有没有办法强制从调用存储过程到特定对象得到的结果行,所以我只能将该对象的列表传递给视图?
我知道我可以使用Node.list()之类的东西来做这件事,但我最终会用一个相当复杂的存储过程替换getnodes()来创建临时表并做一些优化的sql fu.但是现在我正在研究grails交互.
所以在MySQL方面我有以下存储过程:
CREATE DEFINER=`root`@`255.255.255.255` PROCEDURE `getnodes`()
BEGIN
select * from node;
END
在grails控制器上,我有以下内容:
def nodes = new ArrayList<Node>()
// collect all the nodes returned
sql.eachRow("{call getnodes()}") {
nodes.add(it as Node)
}
println "Nodes size is: " + nodes.size()
nodes.eachWithIndex { d, i ->
println "$i : $d"
}
我的计划是将节点传递给视图.
问题是它爆炸了:
nodes.add(it as Node)
这甚至可能吗?我的意思是这应该只是强迫吗?我究竟做错了什么?
解决方法:
不,它不应该“只是胁迫”.关于以下内容:
sql.eachRow("{call getnodes()}") {
nodes.add(it as Node)
}
它的类型是GroovyRowResult,因此Node将调用GroovyRowResult.asType(Node.class)
因此,除非此方法的作者专门处理此转换,否则此强制将失败.由于从GroovyRowResult到Node的转换相当模糊,我认为不应该合理地期望处理这种情况.
一个明显的解决方案是自己进行转换:
sql.eachRow("{call getnodes()}") {GroovyRowResult it ->
Node node = // TODO: Code to convert it to a Node
nodes.add(node)
}
或者,您可以使用元编程来覆盖GroovyRowResult的asType方法,以便它还处理到Node的转换.
内容总结
以上是互联网集市为您收集整理的sql – 将结果行强制转换为对象全部内容,希望文章能够帮你解决sql – 将结果行强制转换为对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。