Grails域类保存空id属性;运行web应用程序时导致错误
在这个项目中,我试图保存雅虎财经URL API返回的数据。要访问的URL为“”。我试图将返回的数据保存为StockQuote.stockInfo参数中的字符串 保存StockQuote实例对象时出现以下错误:Grails域类保存空id属性;运行web应用程序时导致错误,grails,groovy,yahoo-api,yahoo-finance,urlaccess,Grails,Groovy,Yahoo Api,Yahoo Finance,Urlaccess,在这个项目中,我试图保存雅虎财经URL API返回的数据。要访问的URL为“”。我试图将返回的数据保存为StockQuote.stockInfo参数中的字符串 保存StockQuote实例对象时出现以下错误: Error 500: Internal Server Error URI: /StockScreenerSD/stockQuote/tickerLookup Class: org.h2.jdbc.JdbcSQLException Message: NULL not allowed for
Error 500: Internal Server Error
URI: /StockScreenerSD/stockQuote/tickerLookup
Class: org.h2.jdbc.JdbcSQLException
Message: NULL not allowed for column "STOCK_QUOTE"; SQL statement: insert into stock_quote (id, version, date_created, stock_info, ticker) values (null, ?, ?, ?, ?) [23502-164]
Around line 26 of grails-app/controllers/org/grails/finance/StockQuoteController.groovy
23:// def url = ("http://download.finance.yahoo.com/d/quotes.csv?s=" + stockQuote.ticker + "&f=xsna2t8pj1a").toURL()
24: def url = ("http://ichart.yahoo.com/table.csv?s=" +stockQuote.ticker+ "&a=0&b=1&c=2000&d=0&e=31&f=2010&g=w&ignore=.csv").toURL()
25: stockQuote.stockInfo = url.text.toString()
26: stockQuote.save()(flush: true)
27: def stockQuoteList = stockQuoteList()
28: render template: 'usedTickers', collection: stockQuoteList, var: 'stockData'
29: }
尝试保存操作的控制器代码如下:
package org.grails.finance
import grails.plugins.springsecurity.Secured
@Secured('IS_AUTHENTICATED_FULLY')
class StockQuoteController {
// def scaffold = true
def index() {
redirect (action:'getTicker')
}
def getTicker() {
def listing = stockQuoteList()
return [stockQuoteList: listing] // this is a map. key=>value
}
def tickerLookup = {
def stockQuote = new StockQuote(ticker: params.ticker)
def url = ("http://ichart.yahoo.com/table.csv?s=" +stockQuote.ticker+ "&a=0&b=1&c=2000&d=0&e=31&f=2010&g=w&ignore=.csv").toURL()
stockQuote.stockInfo = url.text.toString()
stockQuote.save()(flush: true)
def stockQuoteList = stockQuoteList()
render template: 'usedTickers', collection: stockQuoteList, var: 'stockData'
}
private stockQuoteList() {
StockQuote.list()
}
我希望这是我最后一次编辑。证明如果你有一周很长很忙的话,周五会变得毫无成效好的,以下是设置的方式,对我来说是可行的:
//Domain class StockQuote
class StockQuote {
String ticker
String stockInfo
static mapping = {
stockInfo type: "text" //You have to set the type since the info is CLOB
}
}
//Controller Action
def tickerLookup = {
def stockQuote = new StockQuote(ticker: params.ticker)
def url = ("http://ichart.yahoo.com/table.csv?s=" +stockQuote.ticker+ "&a=0&b=1&c=2000&d=0&e=31&f=2010&g=w&ignore=.csv").toURL()
stockQuote.stockInfo = url.text.toString()
stockQuote.save(flush: true) //Look at how flush is used in save
def stockQuoteList = stockQuoteList()
render template: 'usedTickers', collection: stockQuoteList, var: 'stockData'
}
这对我来说是可行的,我能够将大型CLOB响应从url保存到表中。看看我的表 我用这个网页来指导我…你能展示
StockQuote
域类吗?我想我的星期五发烧已经开始了。在此之前,我想提供一个合适的答案:)我希望我能够解决你的问题,桑凯特。我想我该去印度度假了哎呀,我现在不在笔记本电脑旁。但是谢谢你的回复!我回来后会试试的…谢谢!我将您的pastebin代码插入到我的EclipseGGTS环境中的一个新grails项目中。它工作得很好。但是我自己的项目没有,尽管它有相同的代码……您(或者您曾经)在域类中有一个名为STOCK\u QUOTE
的非空列吗?在我看来,这就是错误所说的<代码>消息:列“STOCK_QUOTE”不允许为NULL不,我根本没有这样命名我的域类…@Kelly OP会将stockInfo
映射到表列STOCK_QUOTE
@dmahapatro-好的,这是合理的。《行动报》有没有说我错过了什么地方?@Kelly他还没有说。把责任推到星期五P