首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >H2内存数据库,[JdbcSQLException:表"USERINFO“未找到;SQL语句:

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

Stack Overflow用户
提问于 2015-01-28 13:37:44
回答 1查看 2K关注 0票数 2

我使用H2在内存数据库中使用play框架,我是个初学者,所以我决定制作一个小小的登录注册应用程序来开始使用scala并播放,我决定在内存数据库中使用H2,但是它会抛出Table not found异常,我在一个sql文件中编写了一个脚本并播放,要求我在启动应用程序时应用这个脚本,但是当我尝试在其中插入数据时,它会抛出异常,例外是

代码语言:javascript
运行
复制
 [JdbcSQLException: Table "USERINFO" not found; SQL statement:
insert into USERINFO (fname,lname,email,userName,pwd,age,choice,gender) values (?,?,?,?,?,?,?,?) [42102-175]]

下面是sql文件的脚本

代码语言:javascript
运行
复制
# --- !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.conf的一部分

代码语言:javascript
运行
复制
 db.default.driver=org.h2.Driver
 db.default.url="jdbc:h2:mem:play"
 db.default.user=sa
 db.default.password=""
 db_close_delay=-1

这是application.scala的代码

代码语言:javascript
运行
复制
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)
      }
)
}

}

这是User.scala的代码

代码语言:javascript
运行
复制
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()  
    }

  }
 */ 
  }

我试过使用这个executeUpdateexecuteInsert,但是没有什么改变,请帮助我做错了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-09 17:09:00

1.

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

代码语言:javascript
运行
复制
    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。

这些不是必要的,它们将自动应用演化(而不显示数据库的“默认”需求演变!):

代码语言:javascript
运行
复制
applyEvolutions.db=true
applyEvolutions.default=true
applyDownEvolutions.default=true
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28193656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档