【问题标题】:JDBC Template in Spring giving exceptionSpring中的JDBC模板给出异常
【发布时间】:2017-06-07 22:52:03
【问题描述】:

所以我尝试了很多更改,但我不确定我的代码到底出了什么问题。这是我在春天的第一个项目。我的 sql 方法出现空指针异常。

我的 JdbcDAO.java

import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.datasource.*;
import org.springframework.stereotype.Repository;

/**
 * Created by Albedo on 6/6/2017.
 */

@Repository("reviewDAO")
public class JdbcReviewDAO {
    private DataSource dataSource;
    private JdbcTemplate jdbcTemplate;

    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    @Bean
    public JdbcTemplate getTemplate(){
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate){
        this.jdbcTemplate = jdbcTemplate;
    }

    // sql methods go here
}

我的 spring-Datasource.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/" />
        <property name="username" value="root" />
        <property name="password" value="admin" />
                </bean>
 <bean id="reviewDAO" class="com.JdbcReviewDAO">
    <property name="dataSource" ref="dataSource" />
</bean>
</beans>

我的应用程序.java:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        //ApplicationContext context =
        //      new ClassPathXmlApplicationContext("Spring-Review.xml");
        JdbcReviewDAO reviewDAO = new JdbcReviewDAO();
        reviewDAO.grabFirstPost(1);
        SpringApplication.run(Application.class, args);
    }
}

(我已删除包名称 - 请放心,它们已在项目中正确定义。以及用于删除冗余的 SQL 方法。如果您怀疑它们是问题,请告诉我是否应该包括它们。)我认为这是更多的是“基础设施”问题(请原谅我的无知,仍然是菜鸟)而不是代码。有人有想法吗?

错误日志:\

Exception in thread "main" java.lang.NullPointerException
    at JdbcDAO.grabFirstPost(JdbcDAO.java:63)
    at Application.main(Application.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Process finished with exit code 1

产生错误的方法*:

public String grabFirstPost(int id) {
    String sql = "SELECT * FROM post WHERE postid ='" + id + "'";

    String postContent = (String)jdbcTemplate.queryForObject(sql, new Object[] {id}, String.class);
    return postContent;
}

【问题讨论】:

  • 请显示错误日志以获得帮助
  • 已添加,虽然我不知道它有多大帮助。
  • 错误出现在JdbcDAO.java的第63行。那条线上是什么?
  • 添加到 OP。这里的一致性是,每当我尝试使用我的任何方法进行查询时,它都会产生空指针异常/相同的错误。虽然我仍然怀疑是我错误地配置了数据源或类似的东西。

标签: java spring jdbctemplate


【解决方案1】:

你的主要方法是错误的。您不是在加载应用程序上下文,而是直接创建您的 DAO。也许你需要改成这样:

ApplicationContext context =
      new ClassPathXmlApplicationContext("Spring-Review.xml");
JdbcReviewDAO reviewDAO = context.getBean("reviewDAO");

【讨论】:

  • 这给了我一个错误,说不能将对象转换为 JDBC reviewDAO。编辑:尝试将其转换为 JDBC reviewDAO,但我遇到了无数错误,以防值得一提。
  • 问题已得到解答。你可以用你的新错误来更新它或创建另一个问题
  • 如果给出错误可以称为答案吗?不幸的是,我不得不自己解决这个问题。
  • 您有特定的错误问题,通过指出问题得到了回答。没有人让你独自解决你的错误。正如我所说,欢迎您就遇到的新错误寻求帮助。我们只是想在人们发布他们的问题之前看到一些真正的努力。
  • 很公平。在对我的依赖项进行了无数次配置编辑后,我终于设法让它工作,并得到你的回答。
【解决方案2】:

看起来变量jdbcTemplate 包含null。最可能的原因是Spring没有注入它,因为setter没有用@Autowired注解。

【讨论】:

  • setDataSource初始化。
  • 哦,对了。另一个未注释的设置器让我感到困惑:-)。不过,仍然可能值得检查是否实际调用了 setter。
  • 如何检查它是否被调用?
  • 使用调试器设置断点?或者在方法中添加System.out.println("I got invoked!")
猜你喜欢
  • 2012-11-09
  • 2019-12-26
  • 2012-12-15
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
相关资源
最近更新 更多