H2内存数据库,[JdbcSQLException:表“USERINFO”未找到; SQL语句:

时间:2015-01-28 13:37:44

标签: database scala h2 playframework-2.3 scala-2.11

我在内存数据库中使用H2与播放框架我是初学者因此我决定制作一个小的登录注册应用程序以开始使用scala和播放我决定在内存数据库中使用H2但它会抛出{{1}异常我在一个sql文件中写一个脚本并且播放让我在启动应用程序时应用这个脚本但是当我尝试在其中插入数据时抛出异常,例外是

Table not found

这是sql文件的脚本

 [JdbcSQLException: Table "USERINFO" not found; SQL statement:
insert into USERINFO (fname,lname,email,userName,pwd,age,choice,gender) values (?,?,?,?,?,?,?,?) [42102-175]]

这是application.conf的一部分

# --- !Ups
CREATE TABLE USERINFO(
    fname varchar(255) NOT NULL,
    lname varchar(255) NOT NULL,
    email varchar(255) NOT NULL,
    userName varchar(255) NOT NULL,
    pwd varchar(255) NOT NULL,
    age Int NOT NULL,
    choice varchar(255) NOT NULL,
    gender varchar(255) NOT NULL
);

DROP TABLE USERINFO;

这是application.scala的代码

 db.default.driver=org.h2.Driver
 db.default.url="jdbc:h2:mem:play"
 db.default.user=sa
 db.default.password=""
 db_close_delay=-1

这是User.scala的代码

package controllers

import play.api._
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import views.html.defaultpages.badRequest
import play.api.data.validation.Constraints._

import models.User



object Application extends Controller {


  val RegisterForm = Form(
mapping(

"fname" -> nonEmptyText(1, 20),
"lname" -> nonEmptyText(1, 20),
"email" -> email,
"userName" -> nonEmptyText(1, 20),
"password" -> nonEmptyText(1, 20),
"age" -> number,
"choice" -> text,
"gender" -> text

)
(User.apply)(User.unapply)
verifying("Ag should be greater then or eual to  18",model=> model.age match 
    {
  case (age) => age>=18

    })
)
  def index = Action {
    Ok(views.html.index(RegisterForm))
  }

 def register =Action {implicit request => 

  RegisterForm.bindFromRequest().fold(
      hasErrors => BadRequest(views.html.index(hasErrors))
        , 
      success => {  

     val result = User.save(success)
println(s"INSERT succeeded, id = $result")
Redirect(routes.Application.index)
      }
)
}

}

我尝试使用此package models import anorm._ import play.api.db.DB import anorm.SqlParser._ import play.api.Play.current case class User ( fname:String, lname:String, email:String, userName:String, password:String, age:Int, choice:String, gender:String ) object User{ val userinfo = { get[String]("fname") ~ get[String]("lname") ~ get[String]("email") ~ get[String]("userName") ~ get[String]("pwd") ~ get[Int]("age") ~ get[String]("choice") ~ get[String]("gender") map { case fname ~ lname ~email~ userName ~ password ~age~ choice~gender => User(fname , lname ,email, userName , password ,age, choice,gender) } } def save(ud:User):Option[Long]= { val id :Option[Long] = DB.withConnection {implicit c => SQL ("insert into USERINFO (fname,lname,email,userName,pwd,age,choice,gender) values ({fname},{lname},{email},{userName},{password},{age},{choice},{gender})") .on('fname -> ud.fname, 'lname ->ud.lname ,'email ->ud.email, 'userName->ud.userName , 'password->ud.password ,'age->ud.age, 'choice->ud.choice,'gender->ud.gender) .executeInsert() } id } /* def save(ud:User)= { DB.withConnection {implicit c => SQL ("insert into USERINFO (fname,lname,email,userName,pwd,age,choice,gender) values ({fname},{lname},{email},{userName},{password},{age},{choice},{gender})") .on('fname -> ud.fname, 'lname ->ud.lname ,'email ->ud.email, 'userName->ud.userName , 'password->ud.password ,'age->ud.age, 'choice->ud.choice,'gender->ud.gender) .executeUpdate() } } */ } executeUpdate,但没有任何改变请帮助我在哪里做错了

1 个答案:

答案 0 :(得分:1)

1。

最有可能的问题是Play!框架引用了查询中的标识符名称(表名,列名),因此您还需要在“create table”语句中引用表名:

    CREATE TABLE "USERINFO"(
    "fname" varchar(255) NOT NULL,
    "lname" varchar(255) NOT NULL,
    "email" varchar(255) NOT NULL,
    "userName" varchar(255) NOT NULL,
    "pwd" varchar(255) NOT NULL,
    "age" Int NOT NULL,
    "choice" varchar(255) NOT NULL,
    "gender" varchar(255) NOT NULL
);

2。

如果没有任何帮助。还有一个方法。我阅读了迁移文档,并且必须将libraryDependencies += evolutions应用于build.sbt。

这些不是必需的,它们会自动应用演化(不显示数据库'默认'需要进化!):

applyEvolutions.db=true
applyEvolutions.default=true
applyDownEvolutions.default=true