Почему я получаю ответ http 500?

#java #http #get #localhost #derby

#java #http #получить #localhost #дерби

Вопрос:

Я пытаюсь получить значения в своей базе данных, используя ‘ID’ для моего параметра path. Однако я получаю ответ HTTP 500 в URi (http://localhost:8080/JAX_RS/rest/details/123 ) при попытке извлечь эти значения. Ниже приведен мой класс DAO. Я также могу предоставить свой класс ресурсов, если это необходимо. Будем признательны за любую обратную связь.

 DetailsDAO


package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DetailsDAO {

    private Connection con = null;

    public DetailsDAO() {
        try {
            System.out.println("Loading db driver...");
            //Class.forName("org.apache.derby.jdbc.ClientDriver");
            System.out.println("Driver loaded...");
            con = DriverManager.getConnection(
                    "jdbc:derby://localhost:1527/SOA4_DB",
                    "sean",
                    "sean");
        } catch (SQLException ex) {
            System.out.println("Exception!");
            ex.printStackTrace();

        }
    }

    public static void main(String[] args) {
        DetailsDAO dao = new DetailsDAO(); // connect to db
        List<Details> detailsList = dao.getAllDetails();
        for (Details d : detailsList) {
            System.out.println(d);
        }
    }
    public List<Details> getAllDetails() {
        List<Details> detailsList = new ArrayList<>();

        try {
            // SQL in here
            PreparedStatement ps = con.prepareStatement(
                    "SELECT * FROM APP.DETAILS"
            );
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Details d = new Details
                        (rs.getInt("ID"),
                        rs.getString("NAME"),
                        rs.getInt("AGE"),
                        rs.getTimestamp("TIMESTAMP"));
                detailsList.add(d);
            }
        } catch (SQLException ex) {
            System.err.println("nSQLException");
            ex.printStackTrace();
        }

        return detailsList;
    }

    public Details getDetails(int id){
        Details details = null;

        try{
            // SQL in here  
            PreparedStatement pstmt = con.prepareStatement(
                    "SELECT ID, NAME, AGE, TIMESTAMP, "
                              "FROM APP.DETAILS "
                              "WHERE (ID = ?)");
            pstmt.setInt(1, id);

            ResultSet rs = pstmt.executeQuery();

            // move the cursor to the start
            if(!rs.next()){ // !F == T
                return null;
            }

            // we have at least one record
            details = new Details
                        (rs.getInt("ID"),
                        rs.getString("NAME"),
                        rs.getInt("AGE"),
                        rs.getTimestamp("TIMESTAMP"));

        } catch (SQLException ex) {
            Logger.getLogger(DetailsDAO.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println("nSQLException");
            ex.printStackTrace();
        }

        return details;
    }
}
  

Комментарии:

1. Есть ли исключение и / или трассировка стека, сгенерированная на сервере?

2. @NotaJD исключение javax.servlet. Исключение ServletException: java.lang. Основная причина исключения NullPointerException java.lang. Исключение NullPointerException

Ответ №1:

У вас есть лишняя запятая после TIMESTAMP в запросе

 PreparedStatement pstmt = con.prepareStatement(
                "SELECT ID, NAME, AGE, TIMESTAMP, "
                          "FROM APP.DETAILS "
                          "WHERE (ID = ?)");