Java 为什么即使表在项目中成功连接,我也会得到org.springframework.jdbc.uncategorizedsqlsexception?
我已经对所有sql语句进行了JUnit测试,它工作正常,但现在我试图在html表中列出表中的数据,我得到一个HTTP状态500–内部服务器错误。另外,当我在MainController.java文件中执行main方法时,我可以打印出数据列表 MainController.javaJava 为什么即使表在项目中成功连接,我也会得到org.springframework.jdbc.uncategorizedsqlsexception?,java,spring-boot,spring-mvc,spring-jdbc,jdbctemplate,Java,Spring Boot,Spring Mvc,Spring Jdbc,Jdbctemplate,我已经对所有sql语句进行了JUnit测试,它工作正常,但现在我试图在html表中列出表中的数据,我得到一个HTTP状态500–内部服务器错误。另外,当我在MainController.java文件中执行main方法时,我可以打印出数据列表 MainController.java import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframe
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;
}
}
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.getFirstName(), obj.getLastName(), obj.getGpa(), 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, gpa, 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, firstName, lastName, gpa, major);
}
};
return jdbcTemplate.query(qry, rowMapper);//line 84
}
}
这听起来可能是一个愚蠢的问题,但您的数据库中是否有一个名为
students
的表?是的,我有,而且我有一个可以插入、选择和删除数据的dao。但是当我想列出数据时,我得到了这个错误。
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)```