Rest API возвращает пустой список при подключении к базе данных с использованием JDBC, игнорируя данные, извлеченные из базы данных - PullRequest
0 голосов
/ 03 февраля 2019

Я делаю проект самостоятельно, и целью проекта является создание API отдыха в Java и получение данных из базы данных с использованием JDBC.Проблема в том, что когда я устанавливаю соединение и извлекаю данные, используя метод main, все работает нормально, но когда я пытаюсь извлечь данные через запрос get, он возвращает пустой список.Это конечная точка

@Path("/users")
public class UserResource {
UserService userService = new UserService();

@GET
@Path("/all")
@Produces(MediaType.APPLICATION_JSON)
public Response getAllUsers() throws InterruptedException {
    List<User> users = userService.getAllUsers();
    GenericEntity<List<User>> wrapper = new GenericEntity<List<User>>(users) {
    };
    return Response.ok(wrapper).build();
}

}

И это класс, который подключается к базе данных с использованием JDBC

public class ConnectionJDBC {

private static String USERNAME = "root";
private static String PASSWORD = "root";
private static String CONSTRING = "jdbc:mysql://localhost:3306/";
private static String DATABASE = "users_db";

static Connection connection;

public ConnectionJDBC() {
}

public static Connection getConnectionToDB() {
    try {
        String url = CONSTRING + DATABASE;
        connection = DriverManager.getConnection(url, USERNAME, PASSWORD);
        if (connection != null) {
            System.out.println("Connected");
        } else {
            System.out.println("Connection faild");
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Something went wrong before establishing the connection");
    }
    return connection;

}

public List<User> getUsers() {
    connection = getConnectionToDB();
    String query = "SELECT * FROM users_db.user_info;";
    List<User> userListRetrived = new ArrayList<>();

    try {
        PreparedStatement statement = connection.prepareStatement(query);
        ResultSet dataRetrieved = statement.executeQuery();
        while (dataRetrieved.next()) {
            User user = new User(dataRetrieved.getInt("id"), 
                    dataRetrieved.getString(2),
                    dataRetrieved.getString(3));
            userListRetrived.add(user);
            return userListRetrived;

        }
    } catch (Exception e) {
        e.printStackTrace();
        System.err.println("Something went wrong when retriving the data");
    }
    return userListRetrived;

}

}

Класс UserServiceздесь

public class UserService {
private ConnectionJDBC connectionJDBC = new ConnectionJDBC();

public UserService() {
}

public List<User> getAllUsers() {
    ConnectionJDBC connectionJDBC = new ConnectionJDBC();
    List<User> usersList = connectionJDBC.getUsers();
    return usersList;
}

}

Пользовательский класс - это обычный Java-бин.Такое ощущение, что метод getUsers игнорирует извлечение данных из базы данных и вместо этого возвращает пустой экземпляр списка.Я использую майку и разворачиваю проект на Glassfish.Любые подсказки о том, как я могу это исправить или объяснение этой ситуации?

Большое спасибо заранее!

1 Ответ

0 голосов
/ 03 февраля 2019

Вы не вызывали метод userService.getUsers() из класса userResource ().Пожалуйста, обновите ваш код в userResource() классе следующим образом

GenericEntity<List<User>> wrapper = new GenericEntity<List<User>>(userService.getUsers());
...