Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 选择操作的JDBCTemplate代码有什么问题?_Java_Spring_Dao_Jdbctemplate - Fatal编程技术网

Java 选择操作的JDBCTemplate代码有什么问题?

Java 选择操作的JDBCTemplate代码有什么问题?,java,spring,dao,jdbctemplate,Java,Spring,Dao,Jdbctemplate,这是一个包含两列的简单表,我尝试使用Spring4.X的JdbcTemplate进行Dao活动,似乎我在这里做错了什么。请在下面找到我的代码: @Named("CategoryDao") public class CategoryDaoImpl implements CategoryDao { @Inject private @Named("BlogDataSource") DataSource dataSource; pri

这是一个包含两列的简单表,我尝试使用Spring4.X的JdbcTemplate进行Dao活动,似乎我在这里做错了什么。请在下面找到我的代码:

@Named("CategoryDao")
public class CategoryDaoImpl implements CategoryDao {

    @Inject 
    private @Named("BlogDataSource")
            DataSource          dataSource;
    private JdbcTemplate        jdbcTemplate;
    private SimpleJdbcInsert    simpleJdbcInsert;

    /*
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }*/


    public JdbcTemplate getJdbcTemplate() {
        if (jdbcTemplate == null) {
            this.jdbcTemplate = new JdbcTemplate(dataSource);
        }
        return jdbcTemplate;
    }

    public SimpleJdbcInsert getSimpleJdbcInsert(){
        if (simpleJdbcInsert == null) {
            this.simpleJdbcInsert = new SimpleJdbcInsert(dataSource)
                    .withTableName("category")
                    .withSchemaName("sreedb")
                    .usingGeneratedKeyColumns("category_id");
        }
        return simpleJdbcInsert;
    }

    public RowMapper<Category> getRowMapper() {
        return new RowMapper<Category>() {
            public Category mapRow(ResultSet rs, int rowNum) throws SQLException {
                Category category = new Category();
                category.setId(rs.getInt("category_id"));
                category.setName(rs.getString("category_name"));
                return category;
            }
        };
    }

    public List<Category> createCategoryList(List<Map<String,Object>> rows){
        List<Category> categoryList = new ArrayList<Category>();
        for (Map<String, Object> row : rows) {
            Category category = new Category();
            category.setId(ObjectUtils.getInteger(row.get("category_id")));
            category.setName(ObjectUtils.getString(row.get("category_name")));
            categoryList.add(category);
        }       
        return categoryList;
    }

    public Map<String,Object> createCategoryParameterMap(Category category){
        Map<String,Object> parameters  = new HashMap<String,Object>();      
        parameters.put("category_name", category.getName());        
        return parameters;
    }


    public Integer save(Category category) {
        return getSimpleJdbcInsert()
                .executeAndReturnKey(createCategoryParameterMap(category))
                .intValue();

    }

    public void update(Category category) {
        String sql = "UPDATE category SET category_name = ?  WHERE category_id = ?" ;
        getJdbcTemplate().update(sql,category.getName(),category.getId() );     
    }

    public Category getCategoryById(Integer id) {
        String sql = "SELECT category_id, category_name FROM category"
                + " WHERE category_id = ?";
        return getJdbcTemplate().queryForObject(sql, getRowMapper(), id);       
    }

    public List<Category> getCategoryList() {
        String sql = "SELECT category_id, category_name FROM category" ;                
        return createCategoryList(getJdbcTemplate().queryForList(sql, getRowMapper()));
    }
}

在我看来,它看起来不错,但我确信我做错了什么!!!有人能读懂并找出我哪里出了问题吗?

您试图调用
queryForList(String sql,Object…args)
方法,并将其作为第二个参数(转换为
Object[]
),该参数又作为JDBC的
PreparedStatement的参数。setObject
这不是您想要的,并且不能正常工作,因为
行映射器的实现不可用


没有一个
queryForList
方法接受作为第二个参数并获得您所追求的结果,而是使用方法。

类别是否实现可序列化?
org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [SELECT category_id, category_name FROM category]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException
    org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:108)
    org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
    org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
    org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
    org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:645)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:680)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:722)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:772)
    org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:849)
    com.abcd.sree.dao.CategoryDaoImpl.getCategoryList(CategoryDaoImpl.java:103)
    com.abcd.sree.service.CategoryService.getCategoryList(CategoryService.java:28)
    com.abcd.sree.view.action.author.createCategoryActionBean.viewCategory(createCategoryActionBean.java:28)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:497)
    net.sourceforge.stripes.controller.DispatcherHelper$6.intercept(DispatcherHelper.java:456)
    net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158)
    net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113)
    net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)
    net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74)
    net.sourceforge.stripes.controller.DispatcherHelper.invokeEventHandler(DispatcherHelper.java:454)
    net.sourceforge.stripes.controller.DispatcherServlet.invokeEventHandler(DispatcherServlet.java:278)
    net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:160)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:260)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:742)
    org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:712)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:131)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:260)
root cause

java.sql.SQLException: Invalid argument value: java.io.NotSerializableException
    com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
    com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:3920)
    com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3564)
    com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setObject(NewProxyPreparedStatement.java:365)
    org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:427)
    org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:235)
    org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:166)
    org.springframework.jdbc.core.ArgumentPreparedStatementSetter.doSetValue(ArgumentPreparedStatementSetter.java:66)
    org.springframework.jdbc.core.ArgumentPreparedStatementSetter.setValues(ArgumentPreparedStatementSetter.java:47)
    org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:686)
    org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:629)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:680)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:722)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:772)
    org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:849)
    com.abcd.sree.dao.CategoryDaoImpl.getCategoryList(CategoryDaoImpl.java:103)
    com.abcd.sree.service.CategoryService.getCategoryList(CategoryService.java:28)
    com.abcd.sree.view.action.author.createCategoryActionBean.viewCategory(createCategoryActionBean.java:28)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:497)
    net.sourceforge.stripes.controller.DispatcherHelper$6.intercept(DispatcherHelper.java:456)
    net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158)
    net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113)
    net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)
    net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74)
    net.sourceforge.stripes.controller.DispatcherHelper.invokeEventHandler(DispatcherHelper.java:454)
    net.sourceforge.stripes.controller.DispatcherServlet.invokeEventHandler(DispatcherServlet.java:278)
    net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:160)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:260)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:742)
    org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:712)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:131)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:260)
root cause

java.io.NotSerializableException: com.abcd.sree.dao.CategoryDaoImpl$1
    java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:3909)
    com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3564)
    com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setObject(NewProxyPreparedStatement.java:365)
    org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:427)
    org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:235)
    org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:166)
    org.springframework.jdbc.core.ArgumentPreparedStatementSetter.doSetValue(ArgumentPreparedStatementSetter.java:66)
    org.springframework.jdbc.core.ArgumentPreparedStatementSetter.setValues(ArgumentPreparedStatementSetter.java:47)
    org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:686)
    org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:629)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:680)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:722)
    org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:772)
    org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:849)
    com.abcd.sree.dao.CategoryDaoImpl.getCategoryList(CategoryDaoImpl.java:103)
    com.abcd.sree.service.CategoryService.getCategoryList(CategoryService.java:28)
    com.abcd.sree.view.action.author.createCategoryActionBean.viewCategory(createCategoryActionBean.java:28)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:497)
    net.sourceforge.stripes.controller.DispatcherHelper$6.intercept(DispatcherHelper.java:456)
    net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158)
    net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113)
    net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)
    net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74)
    net.sourceforge.stripes.controller.DispatcherHelper.invokeEventHandler(DispatcherHelper.java:454)
    net.sourceforge.stripes.controller.DispatcherServlet.invokeEventHandler(DispatcherServlet.java:278)
    net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:160)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:260)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:742)
    org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:712)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:131)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:260)