我试图使用anorm库将对象持久保存在play2 webapp中的postgresql Db中。 表的创建语句"地址"就是这个:
create table address (
addressId bigserial not null,
addressName varchar(255) not null,
street varchar(255) not null,
number varchar(15) not null,
ZIP varchar(15) not null,
region varchar(63) not null,
country varchar(63) not null,
constraint pk_address primary key (addressId)
);
我的Scala / Anorm代码如下所示:
private def create(address: Address, recursive : Boolean): Long = {
DB.withConnection { implicit connection =>
SQL( """
insert into {table_name} (addressName, street, number, ZIP, region, country)
values ({name},{street},{number},{ZIP},{region},{country})
""").on(
"table_name" -> TABLE_NAME,
"name" -> address.name,
"street" -> address.street,
"number" -> address.number,
"ZIP" -> address.ZIP,
"region" -> address.region,
"country"-> address.country
).executeInsert[Option[Long]]().get
}
}
显然,TABLE_NAME是一个包含字符串"地址"
的val问题在于,当我尝试使用正确的地址实例执行它时,例如:
Address("Antonio","vacchi","12","48012","RA","Italia")
我得到了这个例外:
[PSQLException: ERROR: syntax error at or near "$1" Posizione: 13]
' Posizione'是位置的意大利语单词(不知道为什么我在意大利语中得到错误o:)
答案 0 :(得分:2)
使用{table_name}
语法的插值将导致SQL包含定位参数。在CREATE语句中,这是不受支持的。因此,在这种情况下,您必须写出Address
而不是在on
参数中传递它。