Playframework 如何在Ebean中创建自定义插入查询?
我需要用大量的数据填充一个表,所以我不想找到相关的对象,而只想把它们的数值放进去。为此,我将构建一个简单的查询,即:Playframework 如何在Ebean中创建自定义插入查询?,playframework,playframework-2.0,ebean,Playframework,Playframework 2.0,Ebean,我需要用大量的数据填充一个表,所以我不想找到相关的对象,而只想把它们的数值放进去。为此,我将构建一个简单的查询,即: INSERT INTO article_category (article_id, category_id) VALUES (2,12); 无论如何,我找不到一种方法来处理Ebian,我在尝试: RawSql rawSql = RawSqlBuilder .parse("INSERT INTO article_category (article_id, category
INSERT INTO article_category (article_id, category_id) VALUES (2,12);
无论如何,我找不到一种方法来处理Ebian,我在尝试:
RawSql rawSql = RawSqlBuilder
.parse("INSERT INTO article_category (article_id, category_id) VALUES (2,12)")
.create();
但是,这会引发一个异常:
[RuntimeException:分析sql时出错,无法在中找到SELECT关键字:INSERT INTO article_category(article_id,category_id)值(2,12)]
如何使用Ebean调用真正原始的查询?您也可以使用普通的JDBC连接和语句而不是Ebean 类似于此:
Connection connection = play.db.DB.getConnection();
Statement stmt = connection.createStatement();
stmt.executeUpdate("INSERT INTO article_category (article_id, category_id) VALUES (2,12)");
stmt.close();
实际上我找到了一个解决方案,它可以用于删除、更新和插入语句:
SqlUpdate down = Ebean.createSqlUpdate("DELETE FROM table_name WHERE id = 123");
down.execute();
SqlUpdate insert = Ebean.createSqlUpdate("INSERT INTO article_category (article_id, category_id) VALUES (2,12)");
insert.execute();
当然,它还允许在查询中设置命名参数(来自其API的示例):
编辑
还有一种类似的方法可以从DB中选择没有相应模型的行:nico:Ebean的方法做到了这一点,而且是非常干净的方法,不管怎样,对于JDBC示例来说是thx。需要注意的是,至少在Play 2.3.x中包含了Ebean的版本(也就是3.something),任何包含少于三个单词的查询都将使用此解决方案失败(例如“LOCK”)。ebean似乎试图在其代码中分解查询并找到第三个单词,如果它不存在,就会抛出一个异常,如“字符串索引超出范围”嗯,ebean给我带来了很多痛苦-出于某种原因,在我的情况下,在重复键更新时执行
插入…
返回值1,这意味着一行受到了影响。但由于某些原因,当我手动查询时,查询被回滚,表中没有任何内容。奇怪。
String s = "UPDATE f_topic set post_count = :count where id = :id"
SqlUpdate update = Ebean.createSqlUpdate(s);
update.setParameter("id", 1);
update.setParameter("count", 50);
int modifiedCount = Ebean.execute(update);