#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 = ?)");