Методы getInt, getString и getDate не определены для типа PreparedStatement - PullRequest
0 голосов
/ 04 сентября 2018

Здравствуйте, я продолжаю получать эту ошибку: Метод getInt (String / int / Date) не определен для типа PreparedStatement (ошибка в IDE отображается для каждого из: следующие строки:

            int placeNo = myStmt.getInt("NR_MIEJSCA");
            Date start = myStmt.getDate("START");
            Date end = myStmt.getDate("KONIEC");
            String userName = myStmt.getString("IMIE_NAZWISKO");
            int phone = myStmt.getInt("TELEFON");

вот мой метод, который отправляет запрос на конкретный идентификатор парковочного места:

    public List<Book> getSpecBook(int id) throws Exception {
    List<Book> books = new ArrayList<>();

    //int idInt = Integer.parseInt(id);

    Connection myConn = null;
    PreparedStatement myStmt = null;
    ResultSet myRs = null;

    try {
        myConn = dataSource.getConnection();

        // create sql statement
        String sql = "SELECT * FROM `rezerwacje_miejsc` WHERE `NR_MIEJSCA`=?";

        myStmt = myConn.prepareStatement(sql);
        myStmt.setInt(1, id);

        myRs = myStmt.executeQuery();

        while (myRs.next()) {
            // retrive data from result set row
            int placeNo = myStmt.getInt("NR_MIEJSCA");
            Date start = myStmt.getDate("START");
            Date end = myStmt.getDate("KONIEC");
            String userName = myStmt.getString("IMIE_NAZWISKO");
            int phone = myStmt.getInt("TELEFON");

            // create new temporary Book object
            Book tempBook = new Book(placeNo, start, end, userName, phone);

            // add it to our list of Books
            books.add(tempBook);
        }

        return books;

    } finally {
        // clean up JDBC objects
        close(myConn, myStmt, myRs);
    }
}

и вот мой класс API:

package com.pbs.web.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.pbs.web.jdbc.ParkingBookSystem.Book;
import com.pbs.web.jdbc.ParkingBookSystem.BookDbUtil;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.List;

@Path("books")
@Produces(MediaType.APPLICATION_JSON)
public class BookingRestController {
    private BookDbUtil bookDbUtil = new BookDbUtil();

    @GET
    @Path("/")
    public Response getAllBooks() throws Exception {
        List<Book> books = bookDbUtil.getBooks();
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(books);
        return Response.ok().entity(json).build();
    }

    @GET
    @Path("/{id}")
    public Response getSpecBook(@PathParam("id") int id) throws Exception {
        List<Book> books = bookDbUtil.getSpecBook(id);
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(books);
        return Response.ok().entity(json).build();
    }
}

Я думаю, что-то с моей подготовленной оценкой, но я не могу найти проблему.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вы вызываете getInt () и getDate () для PreparedStatement. Эти функции там не существуют: https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html.

Однако они существуют в ResultSet;): https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html

Итак, вместо этого:

while (myRs.next()) {
    // retrive data from result set row
    int placeNo = myStmt.getInt("NR_MIEJSCA");
    Date start = myStmt.getDate("START");
    Date end = myStmt.getDate("KONIEC");
    String userName = myStmt.getString("IMIE_NAZWISKO");
    int phone = myStmt.getInt("TELEFON");

    // create new temporary Book object
    Book tempBook = new Book(placeNo, start, end, userName, phone);

    // add it to our list of Books
    books.add(tempBook);
}

попробуйте это:

while (myRs.next()) {
    // retrive data from result set row
    int placeNo = myRs.getInt("NR_MIEJSCA");
    Date start = myRs.getDate("START");
    Date end = myRs.getDate("KONIEC");
    String userName = myRs.getString("IMIE_NAZWISKO");
    int phone = myRs.getInt("TELEFON");

    // create new temporary Book object
    Book tempBook = new Book(placeNo, start, end, userName, phone);

    // add it to our list of Books
    books.add(tempBook);
}
0 голосов
/ 04 сентября 2018

getInt, getDate и getString являются ResultSet методами, а не PreparedStatement методами. Попробуйте:

int placeNo = myRs.getInt("NR_MIEJSCA");
Date start = myRs.getDate("START");
Date end = myRs.getDate("KONIEC");
String userName = myRs.getString("IMIE_NAZWISKO");
int phone = myRs.getInt("TELEFON");
...