Как я могу отображать данные с MySQL? - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть база данных «Рабочий график» и таблица «Сотрудник». Но когда я пытаюсь отобразить данные из этой таблицы, я вижу только последнюю запись из таблицы

ObservableList<Variable> employeeObList  = FXCollections.observableArrayList();
    columnId.setCellValueFactory(new PropertyValueFactory<Variable, Integer>("id"));
    columnName.setCellValueFactory(new PropertyValueFactory<Variable, String>("name"));
    ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM workchedule.employees;");
    try {
        while (rs.next()) {
            employeeObList.add(new Variable(rs.getInt("id"), rs.getString("name")));
        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
    finally {
        rs.close();
        conn.close();
    }
    employeeTableView.setItems(employeeObList);


@FXML private TableView<Variable> employeeTableView;
@FXML private TableColumn<Variable, Integer> columnId;
@FXML private TableColumn<Variable, String> columnName;

Переменная - класс, в котором я сохраняю переменные с помощью методов получения и установки

Изображение из MySQL Изображение со сцены

1 Ответ

0 голосов
/ 26 февраля 2020

Итак, используя jdb c, я всегда делаю это так:

Разъем, отвечающий за подключение к БД:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Connector {
    public Connection con = null;
    final String URL = "jdbc:mysql://localhost:3306/dbname";
    final String USERNAME = "username";
    // Not so safe but easy
    final String PASSWORD = "1234";

    /*
     * Adds DB Connection
     */
    public void add() {
        try {
            con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (SQLException se) {
            se.printStackTrace();
        }
    }
}

Затем я использую DAO для получения данных из база данных:

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import application.controller.Connector;

public class Dao{

    Connector c = new Connector();

    public ArrayList<Model> selectAllData() {
        ArrayList<Model> list = new ArrayList<>();
        try {
            c.add();
            PreparedStatementstmt = c.con.prepareStatement("SELECT id FROM db.table");
            ResultSet result = stmt.executeQuery(
                    );
            while (result.next()) {
                Model model= new Model();
                 //here set all the attributes
                model.setId(result.getInt("id"));
                list.add(model);
            }
        } catch (SQLException se) {
            se.printStackTrace();
        } finally {
            if (c.con != null) {
                try {
                    c.con.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
            }
        }
        return list;
    }

Затем в контроллере JavaFX я могу просто вызвать функцию DAO.

@FXML
    public void initialize() {
        initTable();
    }

    /*
     * Sets up the table and maps the values
     */
    @SuppressWarnings("unchecked")
    private void initTable() {
        idCol.setCellValueFactory(new PropertyValueFactory<Model, Integer>("id"));
        loadTableData();
    }

    /*
     * Loads all the data into table
     */
    private void loadTableData() {
        models = dao.selectAllData();
        data = FXCollections.observableArrayList(models);
        table.setItems(data);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...