当前位置: 首页 > 知识库问答 >
问题:

为什么我不能对数据库表进行操作?(仍在获取NullPointerException)

田博超
2023-03-14

我在使用JPA在数据库(PL / SQL)表中保存(插入)记录时遇到问题。

这是我的模型类:

@Entity
@Table(name = "QOP_DROOLS_APP")
public class QopDroolAppModel {

        @Id //primary key
        @Column(name = "DROOL_ID")
        private Long droolId;

        @Column(name = "DROOL_NAME")
        private String droolName;

        @Column(name = "DROOL_HUMAN_NAME")
        private String droolHumanName;

        @Column(name = "DROOL_BODY")
        private String droolBody;

        @Column(name = "DROOL_DESCRIPTION")
        private String droolDescription;
}

回购类

@Repository
public interface QopDroolAppRepo extends JpaRepository<QopDroolAppModel, Long> {}

道类

public class QopDroolAppDAO {

    @Autowired(required = true)
    private QopDroolAppRepo repo;

    @Autowired(required = true) 
    public void saveDataInTable(String ruleName, String ruleBody, String description)
    {
        QopDroolAppModel m1 = new QopDroolAppModel();
        long generatedLong = new Random().nextInt(100);
        m1.setDroolId(generatedLong);
        m1.setDroolName(ruleName);
        m1.setDroolHumanName(ruleName);
        m1.setDroolBody(ruleBody);
        m1.setDroolDescription(description);

        this.repo.save(m1);
    }
}

我已经尝试了所有的方法,但仍然是相同的错误。

错误o.a.c.c.C。[.[.路径为[]的上下文中的servlet [dispatcherServlet]的[dispatcher servlet]-servlet . service()引发异常[请求处理失败;嵌套异常是Java . lang . nullpointerexception ],根本原因是Java . lang . nullpointerexception:null

更新-这里是堆栈跟踪

2019-11-04 08:22:28 ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
    at com.droolsWorkbench.services.QopDroolAppDAO.saveDataInTable(QopDroolAppDAO.java:33)
    at com.droolsWorkbench.controller.NewRuleController.DroolsRuleGenerator(NewRuleController.java:213)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:870)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:776)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

共有2个答案

陆洛城
2023-03-14

您是从spring服务/ bean /应用程序运行QopDroolAppDAO类吗?如果你不这样做,那么spring将不会自动连接你的库,我认为这是导致你的空指针问题的原因(当你调用。save会抛出异常

通常,您需要将类/服务设置为这样的豆子

@Component // or @Service / @Controller depending on your application
public class QopDroolAppDAO {

如果你不想让你的类成为一个springbean,一个解决方法是依赖注入你的存储库,如下所示:

public class QopDroolAppDAO {
    private final QopDroolAppRepo repo;

    public QopDroolAppDAO(QopDroolAppRepo repo) {
        this.repo = repo
    }

使用它,您可以从Spring bean类(服务、控制器组件等)中创建存储库

此外,我建议不要以您的方式自动连接存储库,最佳实践是通过构造函数注入bean,如下所示:

@Component // or service etc
public class QopDroolAppDAO {
    private final QopDroolAppRepo repo;

    @Autowired
    public QopDroolAppDAO(QopDroolAppRepo repo) {
        this.repo = repo
    }

点击此处了解更多信息

祁曦哲
2023-03-14

用一些Spring原型注释注释您的DAO类,例如@Component,所以-如果一切设置正确-Spring可以查找这个类,实例化它,并在应用程序启动时设置依赖对象(组件扫描)。

@Component
public class QopDroolAppDAO {

    @Autowired(required = true)
    private QopDroolAppRepo repo;

    public void saveDataInTable(String ruleName, String ruleBody, String description)
    {
        QopDroolAppModel m1 = new QopDroolAppModel();
        long generatedLong = new Random().nextInt(100);
        m1.setDroolId(generatedLong);
        m1.setDroolName(ruleName);
        m1.setDroolHumanName(ruleName);
        m1.setDroolBody(ruleBody);
        m1.setDroolDescription(description);
        this.repo.save(m1);
    }
}
 类似资料:
  • php 扩展 需要开启 pdo、pdo_mysql 扩展 可以通过以下2种方式获取数据操作对象 : 第一种 : db() 函数 通过全局的 db() 函数可以迅速的获取数据操作对象,函数参数: db($tableName, $configName = 'db') $tableName 表名称 $configName 全局配置中对应的键名称 【选填 默认 db】 示例代码 <?php class i

  • 当我试图在Django管理面板中查看我的产品时,出现以下错误。在我的产品模型中,我有“models.DecimalField”,我认为这很重要。Django错误描述 base.py第34行是一个函数: 更多信息:无效操作at/admin/products/products/ 产品/admin.py 来自django。contrib导入管理 从…起进口产品模型 管理地点登记册(产品)

  • 问题内容: 为什么我不能对相同的数据进行两次迭代? 这将打印“执行一次”几次(由于数据有几行),但是根本不会打印“执行两次”。 我第一次遍历数据工作正常,但是第二次当我运行最后一个列表“针对数据行”时,此操作什么都不返回……因此一次执行它却不能两次……? 仅供参考-数据是一个csv.reader对象(如果是原因)… 问题答案: 这是因为它data是一个迭代器,你只能使用一次迭代器。例如: 如果我们

  • 我正在尝试使用python和MySQL开发药房管理系统。但我在连接数据库时遇到了问题。 下面是一些代码:

  • 我想通过数组映射,但我得到一个错误:TypeError: locationAddress.map不是一个函数 我是新来的反应和反应钩。我一直试图简化数组,但运气不好。知道为什么这不起作用吗? 编辑:到目前为止,我尝试了答案中的所有更改,但错误仍然存在。我包括了更多的代码和包。json文件。我尝试停用一些函数,如useEffect,现在只有在我尝试键入要映射的输入字段时才会显示错误。 找到解决方案: