为什么即使表在项目中成功连接,我为什么仍会收到org.springframework.jdbc.UncategorizedSQLException?

问题描述

我已经为所有sql语句完成了JUnit测试,并且可以正常工作,但是现在我试图从html表中的表中列出数据,并且出现HTTP Status 500 – Internal Server Error。另外,当我在MainController.java文件中执行main方法时,我可以打印出数据列表。

MainController.java

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.student.bean.Student;
import com.student.dao.StudentDAO;

@Controller
public class MainController {

    
    @Autowired
    private  StudentDAO studentDAO;
    
    @RequestMapping(value="/")
    
    public ModelAndView listStudent(ModelAndView model){
        
        List<Student> listStudent = studentDAO.list();// line 24
        
        model.addobject("listStudent",listStudent);
        model.setViewName("index");
        
        
        return model;
    }

}


StudentDAOImpl.java

package com.student.dao;

import java.sql.ResultSet;
import java.sql.sqlException;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowMapper;

import com.student.bean.Student;

public class StudentDAOImpl implements StudentDAO {
    private JdbcTemplate jdbcTemplate;

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

    public static final String TABLE = "students";

    @Override
    public int save(Student obj) {

        String qry = "insert into " + TABLE + "(id,first_name,last_name,gpa,major) values (?,?,?)";
        return jdbcTemplate.update(qry,obj.getId(),obj.getFirstName(),obj.getLastName(),obj.getGpa(),obj.getMajor());

    }

    @Override
    public int update(Student obj) {
        String qry = "update " + TABLE + " set  first_name = ?,last_name = ?,gpa = ?,major = ? where id = ?";
        return jdbcTemplate.update(qry,obj.getMajor(),obj.getId());

    }

    @Override
    public Student get(Integer id) {
        String qry = "select * from " + TABLE + " where id =" + id;
        ResultSetExtractor<Student> extractor = new ResultSetExtractor<Student>() {

            public Student extractData(ResultSet rs) throws sqlException,DataAccessException {
                if (rs.next()) {
                    int studentId = rs.getInt("id");
                    String firstName = rs.getString("first_name");
                    String lastName = rs.getString("last_name");
                    double gpa = rs.getDouble("gpa");
                    String major = rs.getString("major");
                    return new Student(studentId,firstName,lastName,major);
                }
                return null;

            }
        };
        return jdbcTemplate.query(qry,extractor);
    }

    @Override
    public int delete(Integer id) {
        String qry = "delete from " + TABLE + " where id =" + id;
        return jdbcTemplate.update(qry);
    }

    @Override
    public List<Student> list() {
        String qry = "select * from " + TABLE;

        RowMapper<Student> rowMapper = new RowMapper<Student>() {
            public Student mapRow(ResultSet rs,int rowNum) throws sqlException {
                int studentId = rs.getInt("id");
                String firstName = rs.getString("first_name");
                String lastName = rs.getString("last_name");
                double gpa = rs.getDouble("gpa");
                String major = rs.getString("major");
                return new Student(studentId,major);
            }
        };

        return jdbcTemplate.query(qry,rowMapper);//line 84
    }

}

错误

org.sqlite.sqliteException: [sqlITE_ERROR] sql error or missing database (no such table: students)
    at org.sqlite.core.DB.newsqlException(DB.java:1010)
    at org.sqlite.core.DB.newsqlException(DB.java:1022)
    at org.sqlite.core.DB.throwex(DB.java:987)
    at org.sqlite.core.NativeDB.prepare_utf8(Native Method)
    at org.sqlite.core.NativeDB.prepare(NativeDB.java:134)
    at org.sqlite.core.DB.prepare(DB.java:264)
    at org.sqlite.jdbc3.JDBC3Statement.executeQuery(JDBC3Statement.java:73)
    at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:438)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:375)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:451)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:461)
    at com.student.dao.StudentDAOImpl.list(StudentDAOImpl.java:84)
    at com.student.controller.MainController.listStudent(MainController.java:24)
    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 org.springframework.web.method.support.invocableHandlerMethod.doInvoke(invocableHandlerMethod.java:190)
    at org.springframework.web.method.support.invocableHandlerMethod.invokeForRequest(invocableHandlerMethod.java:138)
    at org.springframework.web.servlet.mvc.method.annotation.ServletinvocableHandlerMethod.invokeAndHandle(ServletinvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.dispatcherServlet.dodispatch(dispatcherServlet.java:1039)
    at org.springframework.web.servlet.dispatcherServlet.doService(dispatcherServlet.java:942)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
    at org.apache.tomcat.util.net.socketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)```

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)