Java MySQL PersistenceException,“MySQL PersistenceException”;“连接已关闭”;在游戏中!2.2
我正在试用Play框架,并使用2.2.0版本和Java版本 我想使用MySQL作为数据库,我已经按照网站上的说明进行了操作。我可以让进化脚本运行,但我无法将任何内容保存到数据库中。在数据库中创建的表。在尝试调用控制器中的Ebean.save()方法时,我得到了Java MySQL PersistenceException,“MySQL PersistenceException”;“连接已关闭”;在游戏中!2.2,java,mysql,sql,playframework,ebean,Java,Mysql,Sql,Playframework,Ebean,我正在试用Play框架,并使用2.2.0版本和Java版本 我想使用MySQL作为数据库,我已经按照网站上的说明进行了操作。我可以让进化脚本运行,但我无法将任何内容保存到数据库中。在数据库中创建的表。在尝试调用控制器中的Ebean.save()方法时,我得到了[PersistenceException:java.sql.SQLException:Connection is closed!] 我所做的是: 设置build.sbt并添加插件 libraryDependencies ++= Seq(
[PersistenceException:java.sql.SQLException:Connection is closed!]
我所做的是:
libraryDependencies ++= Seq(
javaJdbc,
javaEbean,
cache,
"mysql" % "mysql-connector-java" % "5.1.18"
)
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost:3306/TLC?characterEncoding=UTF-8"
db.default.user=root
db.default.pass=secret
ebean.default="models.*"
import com.avaje.ebean.Ebean;
import play.*;
import play.data.Form;
import play.mvc.*;
import models.Bar;
import views.html.*;
public class Application extends Controller {
public static Result index() {
return ok(index.render("Your new application is ready."));
}
public static Result addBar() {
Bar bar = Form.form(Bar.class).bindFromRequest().get();
bar.save();
return redirect(routes.Application.index());
}
}
<form action="@routes.Application.addBar()" method="post">
<input name="name"/>
<input type="submit"/>
</form>
import play.db.ebean.Model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Bar extends Model {
@Id
public String id;
public String name;
}
谢谢 您可以尝试升级mysql连接器。您正在使用的有点旧(于2011年4月发布) “mysql”%“mysql连接器java”%“5.1.26”
如果这没有帮助,那么我会尝试确保凭据+连接URL是正确的。我遇到了类似的问题,并找到了解决方案 罪魁祸首是您的
Bar
实体的id
属性。您已将id
定义为字符串,并且在保存栏时未对其进行设置。如果Long
,将自动生成id值,但对于字符串,需要显式设置它
所以
我们应该解决这个问题。希望这能有所帮助。我也有同样的问题(在MacOSX和MySQL上),但我没有使用字符串ID
User {
@Id
public long id;
public String fullName;
}
当我尝试时:
Ebean.save(user)
我得到:
[PersistenceException:java.sql.SQLException:连接已关闭!]
使用自动增量策略和更新mysql连接器对我没有帮助
问题是有人试图在字段中编写unicode,因为没有unicode,一切都能正常工作。
仔细检查后,发现MySQL数据库是在没有utf8\u general\u ci的情况下创建的,但是在现有数据库上使用ALTER添加此属性不起作用
使用默认排序规则utf8\u general\u ci创建一个新数据库,这对我来说很有用。有时插入过程中可能会跳过“NOTNULL”列。在我的例子中,我添加了一个新的“int”类型的列,带有“notnull”,并且忘记了为它们插入值。希望它能帮助一些人 您必须在DB会话中执行与DB相关的操作。从您描述的情况来看,在您试图保存对象时,似乎没有活动会话(或者您没有使用它)。在ebeanapi的情况下,可能只是缺少到底层表的连接,看看这个例子:您曾经解决过这个问题吗?有类似的问题。。。奇怪的是,调用Ebean.update(obj)是有效的(直到我做了更复杂的事情),但Ebean.save(obj)从来没有起过作用。让人发疯,所以我自己解决了这个问题。切换到JPA(似乎Eben可能很快就会被移动到外部包),不仅得到了连接关闭错误,而且还得到了一个(先前)错误,这是由于SQL错误造成的。如果我将ebean配置为将错误输出到控制台(目前不确定如何执行),我会捕获它-SQL错误发生,因此连接会关闭。也许你也想看看这是否也发生在你身上。
User {
@Id
public long id;
public String fullName;
}
Ebean.save(user)