gpt4 book ai didi

java - Spring 3 MVC 和 JDBC 的结果集返回 null

转载 作者:行者123 更新时间:2023-12-01 15:16:28 25 4
gpt4 key购买 nike

您好,我是 Spring、MVC 和 JdBC 支持的新手。我希望能够连接到 mysql 数据库..但是当我运行我的网络时它返回 null。我认为下面的代码应该很简单,我在这里缺少什么?感谢大家的回复

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

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

我的 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>

我的 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;

} }

我的 Controller ,它的一部分

@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";

}

这是表示 NULL 的行

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

最佳答案

使用 JdbcTemplate 类时的常见习惯用法是在 Spring 配置文件中配置 DataSource,然后将该共享 DataSource bean 依赖项注入(inject)到 DAO 类中; JdbcTemplate 是在 DataSource 的 setter 中创建的。 私有(private) JdbcTemplate jdbcTemplate;

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

您可以阅读更多相关内容 here

您的代码将如下所示

<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 id="jdbcContactDao" class="com.simple.myacc.dao.JdbcContactDao">
<property name="dataSource" ref="dataSource" />

而是这样做

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

并使用 @Repository 注释您的 JdbcContactDao 类我认为这应该有效

关于java - Spring 3 MVC 和 JDBC 的结果集返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11525682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com