我已經有一個遷移腳本一些簡單的項目:如何配置Play!使用ScalaQuery和H2的框架?
# --- !Ups
create table user (
name varchar(255) not null primary key,
password varchar(255) not null
);
insert into user values ('demo', 'demo');
insert into user values ('kuki', 'pass');
# --- !Downs
drop table if exists user;
數據庫我使用的是H2在內存:
db.default.driver=org.h2.Driver
db.default.url=jdbc:h2:mem:play
然後我明明想查詢一些數據。當我使用ANORM一切正常:
case class User(name: String, password: String)
object User {
val simple = {
get[String]("user.name") ~/
get[String]("user.password") ^^ {
case name~password => User(name, password)
}
}
def findByName(name: String): Option[User] = {
DB.withConnection { implicit connection =>
SQL("select * from user where name = {name}").on(
'name -> name
).as(User.simple ?)
}
}
}
倒黴,當我試圖做同樣的ScalaQuery:
object User extends Table[(String, String)]("user") {
lazy val database = Database.forDataSource(DB.getDataSource())
def name = column[String]("name", O PrimaryKey, O NotNull)
def password = column[String]("password", O NotNull)
def * = name ~ password
def findByName(name: String) = database withSession {
implicit db: Session =>
(for (u <- this if u.name === name) yield u.name ~ u.password).list
}
}
我總是得到同樣的錯誤:
[JdbcSQLException: Tablela "user" nie istnieje Table "user" not found;
SQL statement: SELECT "t1"."name","t1"."password" FROM "user" "t1" WHERE ("t1"."name"='input_name') [42102-158]]
有什麼我做錯了嗎? 我想我嚴格遵循指導從那裏:https://github.com/playframework/Play20/wiki/ScalaDatabase
---------------------編輯------------- ----------
看起來這是Play的演變和ScalaQuery之間的某種不兼容。 當我創建表使用:
database withSession {
implicit db: Session =>
User.ddl.create
User.insert("demo", "demo")
}
一切似乎工作正常。 也許以後我會創建一些簡單的MySQL數據庫,並檢查裏面發生了什麼。
---------------------編輯2 -----------------------
所以我或多或少知道發生了什麼(但我不知道爲什麼)。 當我使用evolutions創建db結構時,所有大寫字母都會寫下表名和列名。
因爲我在Linux上,所以它很重要。 如果我將代碼中的表和列名更改爲大寫,那麼一切正常。
我只是好奇,如果它是一個錯誤,或者如果它是任何方式執行適當的情況下遷移?
你在哪裏把你的遷移腳本?我想這是一個進化腳本,不是嗎? – mandubian 2012-01-03 07:27:04
是的。文件路徑是db/evolutions/default/1.sql – 2012-01-03 10:38:04
對於命名一個表User也不是一個好主意。太多的dbs sql實現會讓人困惑。 – flurdy 2012-04-20 00:43:54