Java Spring3MVC和JDBC的结果集返回null
嗨,我是今年春天的新手,MVC和JdBC支持。 我希望能够连接到mysql数据库。但是当我运行我的web时,它返回null。下面的代码我相信应该很简单,我在这里遗漏了什么?谢谢你的回复 下面是我尝试查询URL时的错误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(
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");
}