powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / TableView выводит не все данные из запроса к Oracle
1 сообщений из 1, страница 1 из 1
TableView выводит не все данные из запроса к Oracle
    #40123860
delphi08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создана программа, выводящая в TableView данные из SQL-запроса к Oracle (12c).
Проблема в том, что некоторые данные в TableView выводятся, некоторые - нет.

Код программы:

1. Класс Controller
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
package sample;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import java.sql.*;


import java.util.Formatter;

public class Controller extends Const{


    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private AnchorPane podlojkaInt;

    @FXML
    private Button buttonClick;


    @FXML
    private TableColumn<DataModelSQL, String> columnOne;

    @FXML
    private TableColumn<DataModelSQL, String> columnTwo;

    @FXML
    private TableColumn<DataModelSQL, String> columnThree;

    @FXML
    private TableColumn<DataModelSQL, String> columnFour;


    @FXML
    private TableColumn<DataModelSQL, String> columnFive;

    @FXML
    private TableColumn<DataModelSQL, String> columnSix;

    @FXML
    private TableColumn<DataModelSQL, String> columnSeven;


    @FXML
    private TableView<DataModelSQL> tableShow;


    @FXML
    void initialize() {


        ObservableList<DataModelSQL> list = FXCollections.observableArrayList();
        tableShow.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
        tableShow.getSelectionModel().setCellSelectionEnabled(true);



        buttonClick.setOnAction(event -> {

            DatabBaseHandler connect = new DatabBaseHandler();


            String sql = "SELECT * FROM TABLE.NAME WHERE ID_COLUMN1 = 12 AND ID_COLUMN2 = 1234";

            try {
                Statement statement = connect.getDbConnection().createStatement();
                ResultSet resultSet = statement.executeQuery(sql);


                while (resultSet.next()) {


                    String column3 = resultSet.getString(3);
                    System.out.println(column3);


                    list.add(new DataModelSQL(resultSet.getString(1),resultSet.getString(2),
                            resultSet.getString(3),resultSet.getString(4),
                            resultSet.getString(5),resultSet.getString(6),
                            resultSet.getString(7)));

                    columnOne.setCellValueFactory(new PropertyValueFactory<DataModelSQL, String>("idV"));
                    columnTwo.setCellValueFactory(new PropertyValueFactory<DataModelSQL, String>("idS"));
                    columnThree.setCellValueFactory(new PropertyValueFactory<DataModelSQL, String>("val"));
                    columnFour.setCellValueFactory(new PropertyValueFactory<DataModelSQL, String>("idUser"));
                    columnFive.setCellValueFactory(new PropertyValueFactory<DataModelSQL, String>("idVParent"));
                    columnSix.setCellValueFactory(new PropertyValueFactory<DataModelSQL, String>("dateAdd"));
                    columnSeven.setCellValueFactory(new PropertyValueFactory<DataModelSQL, String>("visible"));


                    tableShow.setItems(list);



                }
                resultSet.close();
                statement.close();

            } catch (SQLException | ClassNotFoundException e) {
                e.printStackTrace();
                System.out.println(e.getMessage());
            }
        });

    }
}



2. Класс DataModelSQL

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
package sample;

import javafx.beans.property.*;


//это класс для модели данных, получаемых из БД
public class DataModelSQL {


    private SimpleStringProperty idV;
    private SimpleStringProperty idS;
    private SimpleStringProperty val;
    private SimpleStringProperty idUser;
    private SimpleStringProperty idVParent;
    private SimpleStringProperty dateAdd;
    private SimpleStringProperty visible;



    public DataModelSQL(String idV, String idS, String val, String idUser,
                        String idVParent, String dateAdd, String visible)
    {
        this.idV = new SimpleStringProperty(idV);
        this.idS = new SimpleStringProperty(idS);
        this.val = new SimpleStringProperty(val);
        this.idUser = new SimpleStringProperty(idUser);
        this.idVParent = new SimpleStringProperty(idVParent);
        this.dateAdd = new SimpleStringProperty(dateAdd);
        this.visible = new SimpleStringProperty(visible);
    }


    public String getIdV()
    { return idV.get();}
    public void setIdV(String value)
    { idV.set(value);}

    public String getIdS()
    { return idSlv.get();}
    public void setIdS(String value)
    { idSlv.set(value);}

    public String getVal()
    { return val.get();}
    public void setVal(String value)
    { val.set(value);}

    public String getIdUser()
    { return idUser.get();}
    public void setIdUser(String value)
    { idUser.set(value);}

    public String getIdVParent()
    { return idVParent.get();}
    public void setIdVParent(String value)
    { idVParent.set(value);}

    public String getDateAdd()
    { return dateAdd.get();}
    public void setDateAdd(String value)
    { dateAdd.set(value);}

    public String getVisible()
    { return visible.get();}
    public void setVisible(String value)
    { visible.set(value);}

}



TableView выводит результаты колонок: 2, 4, 6, 7, не выводит - 1, 3, 5.
Типы данных в колонках:
1 - number
2 - number
3 - varchar2(2000)
4 - number
5 - number
6 - timestamp
7 - number

По тем колонкам, в которых данные не выводятся, вылетает ошибка, пример:
Can not retrieve property 'idVParent' in PropertyValueFactory: javafx.scene.control.cell.PropertyValueFactory@b0e3501 with provided class type: class sample.DataModelSQL
java.lang.IllegalStateException: Cannot read from unreadable property idVParent

Не совсем понятно, что имеется в виду под "не читаемым свойством".
Тем не менее, полагаю, дело в модели данных и ее работе с типами данных, так как
с помощью тестового кода:

Код: java
1.
2.
String column3 = resultSet.getString(3);
System.out.println(column3);



в цикле while, удавалось в консоль вывести значение колонки №3, которую не выводит TableView.

Поэтому, в итоге вопрос: что неверно прописано в моей модели данных? Дело в типах данных, прописанных в классе-модели DataModelSQL или в неверном обращении к ней из класса Controller?

Также не откажусь от замечаний по общему написанию кода.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / TableView выводит не все данные из запроса к Oracle
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]