Java MySQL PersistenceException,“MySQL PersistenceException”;“连接已关闭”;在游戏中!2.2

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(

我正在试用Play框架,并使用2.2.0版本和Java版本

我想使用MySQL作为数据库,我已经按照网站上的说明进行了操作。我可以让进化脚本运行,但我无法将任何内容保存到数据库中。在数据库中创建的表。在尝试调用控制器中的Ebean.save()方法时,我得到了
[PersistenceException:java.sql.SQLException:Connection is closed!]

我所做的是:

  • 设置build.sbt并添加插件

    libraryDependencies ++= Seq(
        javaJdbc,
        javaEbean,
        cache,
        "mysql" % "mysql-connector-java" % "5.1.18"
    )
    
  • 设置conf/application.conf

    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服务器

    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中创建数据库本身

  • 我错过了什么?我已经做了4个小时了,仍然不知道出了什么问题。若我使用内存数据库中的h2,它就可以正常工作。请帮帮我


    谢谢

    您可以尝试升级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)