OK, więc jestem nowy w tym, a ja szukałem przez dwa tygodnie, próbując uzyskać zestaw wyników SQL, aby wydrukować do TableView stworzonego przez JavaFX Scene Builder. Mogę wydrukować mój zestaw wyników przy użyciu System.out.println, a dane są poprawne, ale kiedy próbuję umieścić go na liście, mój widok tabeli pokazuje jedną kolumnę z zerami i drugą kolumną pustą. Próbuję wydrukować listę (println), ale otrzymuję wskaźnik obiektu (?), A nie dane, więc nie widzę, czy przechodzę z ResultSet na listę niepoprawnie.Wyświetlanie elementów z bazy danych w JavaFX TableView
Każda pomoc byłaby doceniona ... Chcę zrozumieć tę koncepcję, a nie tylko uzyskać odpowiedź.
Oto mój kod kontrolera:
public class TesterUIController implements Initializable {
@FXML
private TableView<dataClass> Table;
@FXML
private Button TestButton;
@FXML
private TableColumn<dataClass, Integer> colKey;
@FXML
private TableColumn<dataClass, String> colSalesNo;
public static void main (String[] args) {
System.out.println("Main has run");
}
/**
*
* @param fxmlFileLocation
* @param resources
*/
@Override
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
TestButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Button Pressed");
colKey.setCellValueFactory(new PropertyValueFactory<dataClass, Integer>("Key"));
colSalesNo.setCellValueFactory(new PropertyValueFactory<dataClass, String>("SalesNo"));
Table.getItems().setAll(gobbledyGook());
}
});
}
/*
* dataClass is a (sub)class representing the data for TableView "Table"
*/
public class dataClass {
private IntegerProperty Key;
public void setKey (int value) {KeyProperty().set(value);}
public int getKey() {
return KeyProperty().get();
}
public IntegerProperty KeyProperty() {
if (Key == null) Key = new SimpleIntegerProperty(this, "Key");
return Key;
}
private StringProperty SalesNo;
public void setSalesNo(String value) {
SalesNoProperty().set(value);
}
public String getSalesNo() {
return SalesNoProperty().get();
}
public StringProperty SalesNoProperty() {
if (SalesNo == null) SalesNo = new SimpleStringProperty(this, "SalesNo");
return SalesNo;
}
}
private List<dataClass> gobbledyGook() { //ObservableList<dataClass> gobbledyGook() { // ResultSet getData() {
Connection conn;
String dbDriver;
Statement st;
ResultSet rs;// = null;
List ll = new LinkedList();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
dbDriver = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};"
+ "DBQ=Inventario.mdb;";
conn = DriverManager.getConnection(dbDriver, "", "");
st = conn.createStatement();
String getSalesNumber = "SELECT * FROM SalesNumber " // TOP 1 * FROM ...
+ "ORDER BY SalesNumber.Key DESC";// LIMIT 1";
rs = st.executeQuery(getSalesNumber);
while (rs.next()) {
int Key = rs.getInt(1);
double saleNo = rs.getDouble(2);
NumberFormat formatter = new DecimalFormat("###########");
String SalesNo = formatter.format(saleNo);
System.out.println(Key + ", " + SalesNo); //key + ", " + saleNo);
dataClass roww = new dataClass();
ll.add(roww);
}
}
catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(TesterUIController.class.getName()).log(Level.SEVERE, null, ex);
}
return ll;
}
}
OMG, DZIĘKUJĘ! Twoja poprawka działała idealnie, a twoje linki pomagają mi zrozumieć logikę, za którą poszedłem źle! Jeśli chodzi o konwencje nazewnictwa, wiedziałem, że ich nie śledzę, ponieważ jeszcze ich nie poznałem, ale tak, pracuję nad tym. Jeszcze raz dzięki! Najlepsza pomoc, jaką znalazłem w ciągu dwóch tygodni ścigania mojego ogona! – John