2

我開發簡單的Web應用程序與遊戲框架,Scala和存放在MySQL DATABSE和我收到錯誤如何解決的RuntimeException:TypeDoesNotMatch(不能轉換成1:類java.lang.String龍列

Exception

我在做什麼:

  • 當用戶輸入值和存儲我正在重定向用戶到該節目的數據庫中存在
  • VALU所有條目頁面後ES越來越存儲,但它給例外的時候重定向到頁面

models/Keyword.scala

case class Keyword(blog: String,cat: String,word: String,count: Long, summaryId: String) 

object Keyword { 


    val keyw = { 
    get[String]("keyword.blog")~ 
    get[String]("keyword.cat")~ 
    get[String]("keyword.word")~ 
    get[Long]("keyword.count") ~ 
    get[String]("keyword.summaryId") map { 
    case blog~cat~word~count~summaryId => Keyword(blog,cat,word,count, summaryId) 
    } 
} 

    def all(): List[Keyword] = DB.withConnection { implicit c => 
    SQL("select * from keyword").as(Keyword.keyw *) 
} 


def create(key: Keyword){DB.withConnection{implicit c=> 
    SQL("insert into keyword values({blog}, {cat}, {word},{count},{summaryId})").on('blog->key.blog, 
     'cat -> key.cat, 
     'word-> key.word, 
     'count-> key.count, 
     'summaryId -> key.summaryId).executeUpdate() 
} 
} 

controllers/Application.scala

object Application extends Controller { 

    val ta:Form[Keyword] = Form(
      mapping(
    "blog" -> nonEmptyText, 
    "cat" -> nonEmptyText, 
    "word" -> nonEmptyText, 
    "count"-> of[Long], 
    "summaryId"-> nonEmptyText 
)(Keyword.apply)(Keyword.unapply) 
) 

    def index = Action { 
    Ok(html.index(ta)); 
    } 
    def newTask= Action { implicit request => 
    ta.bindFromRequest.fold(
    errors => BadRequest(html.index(errors)), 
    keywo => { 

     Keyword.create(keywo) 
     Ok(views.html.data(Keyword.all())) 
    } 
) 
} 

的 - 當我使用H2-數據庫它正在運行的時間

- 當我使用MySQL那個時候它給例外

給我一些想法來解決這個問題!

+0

難道說count是MySQL數據庫模式中的字符串列嗎? – johanandren

+0

是的,這是真的,它是'Mysql'數據庫中的字符串,但是'h2'中它是'BIGINT',爲什麼? –

+2

因爲你已經創建了這種模式?你是用演變還是手工來管理它? – johanandren

回答

1

在app/helpers文件夾中創建一個AnormExtension助手。稱之爲AnormExtension.scala。代碼如下:

object AnormExtension { 

implicit def rowJavaLongToLong: Column[Long] = Column.nonNull { (value, meta) => 
    val MetaDataItem(qualified, nullable, clazz) = meta 
    value match { 
     case d: java.lang.Long => Right(d.longValue()) 
     case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Long for column " + qualified)) 
    } 
    } 
} 
0

當我試圖用pgsql和anorm進行INSERT時,經常會遇到這個錯誤。我通過使用Sql字符串解析器來解決它。這可能適合你......不是100%確定:

def all(): List[Keyword] = DB.withConnection { implicit c => 
    SQL("select * from keyword").as(Keyword.keyw *).execute(SqlParser.scalar[String].singleOpt) 
} 
相關問題