Java Spring3MVC和JDBC的结果集返回null

Java Spring3MVC和JDBC的结果集返回null,java,spring,spring-mvc,jdbc,Java,Spring,Spring Mvc,Jdbc,嗨,我是今年春天的新手,MVC和JdBC支持。 我希望能够连接到mysql数据库。但是当我运行我的web时,它返回null。下面的代码我相信应该很简单,我在这里遗漏了什么?谢谢你的回复 下面是我尝试查询URL时的错误 java.lang.NullPointerException com.simple.myacc.dao.JdbcContactDao.findAll(JdbcContactDao.java:55) com.simple.myacc.ContactController.getAll(

嗨,我是今年春天的新手,MVC和JdBC支持。 我希望能够连接到mysql数据库。但是当我运行我的web时,它返回null。下面的代码我相信应该很简单,我在这里遗漏了什么?谢谢你的回复

下面是我尝试查询URL时的错误

java.lang.NullPointerException
com.simple.myacc.dao.JdbcContactDao.findAll(JdbcContactDao.java:55)
com.simple.myacc.ContactController.getAll(ContactController.java:44)
My spring.xml

.....

<context:component-scan base-package="com.simple.myacc" />

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/jsp/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/webcontact" />
    <property name="username" value="root" />
    <property name="password" value="password" />
</bean>

<bean id="jdbcContactDao" class="com.simple.myacc.dao.JdbcContactDao">
    <property name="dataSource" ref="dataSource" />
</bean>
。。。。。
/WEB-INF/jsp/
.jsp

我的JdbcContactDao

public class JdbcContactDao {
protected static Logger logger = Logger.getLogger("service");
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;

public JdbcContactDao() {

}

public List<Contact> findAll() {

    String sql = "select * from contact";
    List<Contact> contacts = new ArrayList<Contact>();
    List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql);
    for (Map rs : rows) {
        Contact contact = new Contact();
        contact.setId((Integer) rs.get("id"));
        contact.setFirstname((String) rs.get("firstname"));
        contact.setLastname((String) rs.get("lastname"));
        contact.setEmail((String) rs.get("email"));
        contact.setPhone((String) rs.get("phone"));
        contacts.add(contact);
    }
    return contacts;
}

@Resource(name = "dataSource")
public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;

} }
公共类JdbcContactDao{
受保护的静态记录器=Logger.getLogger(“服务”);
私有数据源;
私有JdbcTemplate JdbcTemplate;
公共JdbcContactDao(){
}
公共列表findAll(){
String sql=“从联系人中选择*”;
列表联系人=新建ArrayList();
列表行=jdbcTemplate.queryForList(sql);
用于(地图rs:行){
触点=新触点();
contact.setId((整数)rs.get(“id”);
contact.setFirstname((字符串)rs.get(“firstname”);
contact.setLastname((字符串)rs.get(“lastname”);
contact.setEmail((字符串)rs.get(“电子邮件”);
contact.setPhone((字符串)rs.get(“电话”));
联系人。添加(联系人);
}
返回联系人;
}
@资源(name=“dataSource”)
public void setDataSource(数据源数据源){
this.dataSource=数据源;
} }
我的控制器,它的一部分

@RequestMapping(value="/contact/list2",method = RequestMethod.GET)
public String getAll(ModelMap model) {
    dao=new JdbcContactDao();
    List<Contact> contacts = dao.findAll();

     // Attach persons to the Model
     model.addAttribute("contacts", contacts);


     return "contact.list";

}
@RequestMapping(value=“/contact/list2”,method=RequestMethod.GET)
公共字符串getAll(ModelMap模型){
dao=新的JdbcContactDao();
List contacts=dao.findAll();
//将人员附加到模型上
model.addAttribute(“联系人”,联系人);
返回“联系人列表”;
}
这是表示空值的行

        List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql);
List rows=jdbcTemplate.queryForList(sql);

我猜JdbcContactDao的第55行是这一行
List rows=jdbcTemplate.queryForList(sql)声明jdbcTemplate,但从不给它赋值,而且它也没有为注入添加注释,所以它总是为null。因此,当您尝试使用它时,您将得到NPE。

使用JdbcTemplate类时的一个常见习惯用法是在Spring配置文件中配置一个数据源,然后将该共享数据源bean注入到DAO类中;JdbcTemplate是在数据源的setter中创建的。 私有JdbcTemplate JdbcTemplate

public void setDataSource(DataSource dataSource) {
    this.jdbcTemplate = new JdbcTemplate(dataSource);
}
你可以阅读更多关于这个的内容

您的代码将如下所示

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/webcontact" />
<property name="username" value="root" />
<property name="password" value="password" />
并使用@Repository注释JdbcContactDao类
我认为这应该可以

您已经在配置文件中配置了数据源和JDBCContactDAOBean。 因此,您需要以同样的方式将JDBCContactDAOBean注入控制器

<bean id="myController" class="mypath.MyController">
<property name="dao" ref="jdbcContactDao"/>
</bean>

在你的控制器里

public JdbcContactDao dao;

@Resource(name="dao")
public void setDao(JdbcContactDao dao){
    this.dao = dao;
}


@RequestMapping(value="/contact/list2",method = RequestMethod.GET)
public String getAll(ModelMap model) {

    List<Contact> contacts = dao.findAll();

    // Attach persons to the Model
    model.addAttribute("contacts", contacts);


    return "contact.list";

}
publicjdbcontactdao;
@资源(name=“dao”)
公共void setDao(JdbcContactDao){
this.dao=dao;
}
@RequestMapping(value=“/contact/list2”,method=RequestMethod.GET)
公共字符串getAll(ModelMap模型){
List contacts=dao.findAll();
//将人员附加到模型上
model.addAttribute(“联系人”,联系人);
返回“联系人列表”;
}

在使用java/jdbc连接到旧表时遇到了类似的问题 String sql=“从表中选择用户名”


用户名始终为空。查看返回值的映射发现映射没有使用用户名,但是在“用户名”表上设置的标签必须有DBA的修复。希望这有帮助

JdbcContactDao.java的第55行有什么内容?更新了..List rows=jdbcTemplate.queryForList(sql);Hi digitaljoe,感谢您的快速回复,我尝试了public void setDataSource(DataSource DataSource){this.DataSource=DataSource;this.jdbcTemplate=new jdbcTemplate(DataSource);}但仍然返回nullYes,这是帮助。缺少的部分是@Resource(name=“dao”)/或指向我控制器中的bean。。非常感谢你。还有乔尔和其他人。。很有帮助
<bean id="myController" class="mypath.MyController">
<property name="dao" ref="jdbcContactDao"/>
</bean>
public JdbcContactDao dao;

@Resource(name="dao")
public void setDao(JdbcContactDao dao){
    this.dao = dao;
}


@RequestMapping(value="/contact/list2",method = RequestMethod.GET)
public String getAll(ModelMap model) {

    List<Contact> contacts = dao.findAll();

    // Attach persons to the Model
    model.addAttribute("contacts", contacts);


    return "contact.list";

}
jdbc.queryForList(sql); 

queryReturnList = jdbc.queryForList(sql);  

    for (Map mp : queryReturnList){          
        String userName = (String)mp.get("user_name");          
}