Scala 使用JDBC创建PostgreSQL触发器
我正在尝试在数据库演化脚本中创建PostgreSQL触发器。sql代码相对简单,在pgAdminIII中运行良好:Scala 使用JDBC创建PostgreSQL触发器,scala,jdbc,plpgsql,postgresql-9.1,playframework-2.0,Scala,Jdbc,Plpgsql,Postgresql 9.1,Playframework 2.0,我正在尝试在数据库演化脚本中创建PostgreSQL触发器。sql代码相对简单,在pgAdminIII中运行良好: CREATE OR REPLACE FUNCTION update_modified() RETURNS TRIGGER AS $$ BEGIN NEW.modified = now(); RETURN NEW; END; $$ LANGUAGE 'plpgsql'; 但是,我在运行evolution时遇到一个错误:error:unterminated 位
CREATE OR REPLACE FUNCTION update_modified() RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
但是,我在运行evolution时遇到一个错误:error:unterminated
位于“$$BEGIN NEW.modified=now()”或其附近的字符串。
。SQL代码似乎被截断了
函数中遇到的第一个分号。我正在使用PostgreSQL的“9.1-901.jdbc4”JDBC驱动程序
更新:
(第219行+)中的代码对执行简单拆分代码>。框架本身似乎有缺陷:
// Execute script
s.sql.split(";").map(_.trim).foreach {
case "" =>
case statement => execute(statement)
}
有什么解决办法吗?您可以尝试以下方法
String sql = "CREATE OR REPLACE FUNCTION update_modified() RETURNS TRIGGER AS $$ " +
"BEGIN " +
"NEW.modified = now(); " +
"RETURN NEW; " +
"END; " +
"$$ LANGUAGE 'plpgsql';";
DataSource ds = getDataSource();
try {
Connection conn = ds.getConnection();
conn.setAutoCommit(true);
Statement st = conn.createStatement();
st.executeUpdate(sql);
st.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
希望这对您有用。问题也已讨论过。请向我们展示创建触发器的Java代码。创建触发器的代码不是我自己的,因为sql脚本是一个脚本。我想可以找到(Scala!)代码。最有可能的是,该框架将您的语句拆分为代码>。您需要告诉它以单个语句而不是脚本的形式运行该字符串。由于我不知道Play框架,我无法告诉您必须如何配置它。代码的正确位置在哪里?在评估演进之前,需要先执行它。Gloabal
的onStart
方法似乎是错误的。。。