我目前正在使用自动创建的类和实体管理器,这是在将表绑定到NetBeans的数据库以获取和设置derby数据库的值时创建的。但是,当我想使用
更新/编辑字段时:LessonTb Obj = new LessonTb();
Obj.setAdditionalResources(Paths);
Obj.setDescription(LessonDescription);
Obj.setLessonName(LessonName);
Obj.setLessonPath(LessonName + ".txt");
Obj.setRecommendedTest(RecommendedTest);
EUCLIDES_DBPUEntityManager.getTransaction().begin();
EUCLIDES_DBPUEntityManager.getTransaction().commit();
lessonTbList.clear();
lessonTbList.addAll(lessonTbQuery.getResultList());
当前条目不会在数据库中更新,尽管知道代码在其他项目中工作。我使用来自相同LessonTb
类的相同get和set方法,该方法用于添加新条目和删除条目。
什么可能是错的,我如何解决我的问题?
有几种可能性。也许你可以做更多的研究,至少排除其中的一些:
- 你正在使用内存数据库,你没有意识到当你的应用程序终止时,所有的数据库内容都会丢失。
- 你没有处于自动提交模式,并且你的应用程序在更新后未能发出
commit
语句 - 您实际上并没有发出您认为正在发出的更新声明。由于某些原因,您的程序流没有到达该代码。 你的更新语句遇到了一个错误,但它不是那种导致异常的错误。相反,会返回一个错误代码,但不会抛出异常。
- 数据库有多个副本,或者数据库中有多个模式副本,你正在更新数据库的一个副本,但查询另一个副本。
帮助您更深入地诊断问题的一个强大工具是学习如何使用- derby.language。logStatementText=true并在derby.log中读取您发出的实际SQL语句,以及这些语句的结果是什么。这里有几个链接可以帮助你开始:https://db.apache.org/derby/docs/10.4/tuning/rtunproper43517.html和http://apache-database.10148.n7.nabble.com/How-to-log-queries-in-Apache-Derby-td136818.html