有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Spring中的java JDBC模板出现异常

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

我的JdbcDAO。爪哇

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数据源。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>

我的申请书。爪哇:

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;
}

共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

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