Я использую H2 в базе данных памяти с помощью платформы воспроизведения. Я начинаю, поэтому я решил сделать небольшое приложение для входа в систему, чтобы начать работу с scala и воспроизведением. Я решил использовать H2 в базе данных памяти, но он выбрасывает исключение Table not found
я пишу скрипт в файл SQL и игры попросил меня, чтобы применить этот сценарий, когда я запустить приложение, но он бросает исключение, когда я пытаюсь вставить данные в нем исключение составляетH2 in-memory database, [JdbcSQLException: таблица «USERINFO» не найдена; SQL-оператор:
[JdbcSQLException: Table "USERINFO" not found; SQL statement:
insert into USERINFO (fname,lname,email,userName,pwd,age,choice,gender) values (?,?,?,?,?,?,?,?) [42102-175]]
здесь сценарий SQL файл
# --- !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;
и вот раздел приложения.conf
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
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
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
и executeInsert
, но ничего не изменилось, пожалуйста, помогите мне, где я делаю неправильно
в оперативной памяти базы данных в оперативной памяти, так что он уходит, когда ты закрыть доступ к ней, а разные приложения получить свою версию. Как вы выполняете SQL? Если вы запускаете его в отдельном процессе, это именно то, что мы ожидаем; попробуйте дать ему путь к файловой системе ('jdbc: h2:/home/users/username/mydatabase') вместо – lmm
Я получаю помощь от [этой ссылки] (https://www.playframework.com/documentation/2.1.0/ ScalaTodoList) – swaheed
Тогда да, база данных в памяти не будет работать именно по этой причине. – lmm