Qualcuno mi può dare un esempio di una classe che collega JavaFX con MySQL, non desidero Classe principale, avere uno, vogliono solo un esempio di una classe che collega tutte le applicazioni a un database MySQL e ottiene una fila da quel database in un tavolo, ho cercato l'intero internet e non ho trovato nulla di preciso al punto che non voglio niente di speciale solo qualcosa per ottenere il lavoro fatto per favore. Qualcosa di pulito e semplice.JavaFX MySQL si prega
risposta
Come minimo, sono necessarie tre classi: una per rappresentare i dati, una per l'interfaccia utente e l'altra per gestire la connessione al database. In una vera app ti servirebbe di più, naturalmente. Questo esempio segue lo stesso esempio di base come il TableView
tutorial
Supponiamo che il vostro database ha un tavolo person
con tre colonne, first_name
, last_name
, email_address
.
allora si sarebbe scrivere una classe Person
:
import javafx.beans.property.StringProperty ;
import javafx.beans.property.SimpleStringProperty ;
public class Person {
private final StringProperty firstName = new SimpleStringProperty(this, "firstName");
public StringProperty firstNameProperty() {
return firstName ;
}
public final String getFirstName() {
return firstNameProperty().get();
}
public final void setFirstName(String firstName) {
firstNameProperty().set(firstName);
}
private final StringProperty lastName = new SimpleStringProperty(this, "lastName");
public StringProperty lastNameProperty() {
return lastName ;
}
public final String getLastName() {
return lastNameProperty().get();
}
public final void setLastName(String lastName) {
lastNameProperty().set(lastName);
}
private final StringProperty email = new SimpleStringProperty(this, "email");
public StringProperty emailProperty() {
return email ;
}
public final String getEmail() {
return emailProperty().get();
}
public final void setEmail(String email) {
emailProperty().set(email);
}
public Person() {}
public Person(String firstName, String lastName, String email) {
setFirstName(firstName);
setLastName(lastName);
setEmail(email);
}
}
Una classe per accedere ai dati dal database:
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.Statement ;
import java.sql.ResultSet ;
import java.util.List ;
import java.util.ArrayList ;
public class PersonDataAccessor {
// in real life, use a connection pool....
private Connection connection ;
public PersonDataAccessor(String driverClassName, String dbURL, String user, String password) throws SQLException, ClassNotFoundException {
Class.forName(driverClassName);
connection = DriverManager.getConnection(dbURL, user, password);
}
public void shutdown() throws SQLException {
if (connection != null) {
connection.close();
}
}
public List<Person> getPersonList() throws SQLException {
try (
Statement stmnt = connection.createStatement();
ResultSet rs = stmnt.executeQuery("select * from person");
){
List<Person> personList = new ArrayList<>();
while (rs.next()) {
String firstName = rs.getString("first_name");
String lastName = rs.getString("last_name");
String email = rs.getString("email_address");
Person person = new Person(firstName, lastName, email);
personList.add(person);
}
return personList ;
}
}
// other methods, eg. addPerson(...) etc
}
E poi una classe di interfaccia utente:
import javafx.application.Application ;
import javafx.scene.control.TableView ;
import javafx.scene.control.TableColumn ;
import javafx.scene.control.cell.PropertyValueFactory ;
import javafx.scene.layout.BorderPane ;
import javafx.scene.Scene ;
import javafx.stage.Stage ;
public class PersonTableApp extends Application {
private PersonDataAccessor dataAccessor ;
@Override
public void start(Stage primaryStage) throws Exception {
dataAccessor = new PersonDataAccessor(...); // provide driverName, dbURL, user, password...
TableView<Person> personTable = new TableView<>();
TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name");
firstNameCol.setCellValueFactory(new PropertyValueFactory<>("firstName"));
TableColumn<Person, String> lastNameCol = new TableColumn<>("Last Name");
lastNameCol.setCellValueFactory(new PropertyValueFactory<>("lastName"));
TableColumn<Person, String> emailCol = new TableColumn<>("Email");
emailCol.setCellValueFactory(new PropertyValueFactory<>("email"));
personTable.getColumns().addAll(firstNameCol, lastNameCol, emailCol);
personTable.getItems().addAll(dataAccessor.getPersonList());
BorderPane root = new BorderPane();
root.setCenter(personTable);
Scene scene = new Scene(root, 600, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
@Override
public void stop() throws Exception {
if (dataAccessor != null) {
dataAccessor.shutdown();
}
}
public static void main(String[] args) {
launch(args);
}
}
(L'ho appena inserito senza test, quindi potrebbero esserci errori di battitura, importazioni mancanti, ecc., Ma va bene ULD essere sufficiente per dare l'idea)
grazie mille – marcS
Risposta stupenda. Grazie! –
Oltre alla risposta di James_D:.
ho voluto per connettersi a un database remoto (MySQL), così ho cambiato il costruttore e collegati da url-only:
public UserAccessor(String dbURL, String user, String password) throws SQLException, ClassNotFoundException {
connection = DriverManager.getConnection(dbURL, user, password);
}
Init via:
UserAccessor userAccessor = new UserAccessor(
"jdbc:mysql://xxx.xxx.xxx.xxx:YOUR_PORT", "YOUR_DB_USER", "YOUR_PASSWORD")
Si prega di notare: sarà inoltre necessario includere il connettore lib. Ho scelto mysql-connector-java-5.1.40-bin.jar
che è venuto con IntelliJ e si trovava sotto /Users/martin/Library/Preferences/IntelliJIdea2017.1/jdbc-drivers/MySQL Connector/J/5.1.40/mysql-connector-java-5.1.40-bin.jar
Complimenti appartengono James_D.
- 1. Si prega di configurare un GWT SDK?
- 2. anomalia puntatore C, si prega di spiegare
- 3. Android.os.Build esempi dati, si prega di
- 4. Si prega di spiegare la differenza
- 5. "eval" è deprecato. Si prega di utilizzare "valutare" invece
- 6. NVM_NODEJS_ORG_MIRROR è deprecato, si prega di utilizzare NODEJS_ORG_MIRROR
- 7. Si prega di raccomandare un buon tutorial Slime o screencast
- 8. Si prega di criticare i miei sforzi di autenticazione PHP
- 9. Si prega di spiegare a me il seguente codice Clojure
- 10. Si prega di spiegare Getter e Setter in Objective C
- 11. Si prega di spiegare su Funz delegato in .NET 4.0
- 12. Si prega di suggerire un visualizzatore di PDF per WPF
- 13. Si prega di spiegare l'uso di _.identity (valore) di underscore.js
- 14. Si prega di spiegare il significato di Following Fusioni
- 15. Si prega di spiegare questi tipi di fetch Python
- 16. Si prega di suggerire alcuni tutorial per l'apprendimento dell'espressione pointcut
- 17. Si prega di spiegare questo codice Objective-C
- 18. Si prega di raccomandare una buona lettura su Scoiattolo
- 19. Si prega di suggerire. Lavoro netto/Coda di attività
- 20. "Si prega di correggere prima di procedere." - Errore di web.config
- 21. Si prega di inizializzare il sistema log4j avviso correttamente
- 22. Si prega di spiegare la sintassi di Android build.gradle groovy
- 23. C principiante di programmazione - Si prega di spiegare questo errore
- 24. JavaCC: Si prega di darmi collegamenti a esempi "reali"
- 25. si prega di fornire il codice Kryo sample
- 26. Intellij Javafx artefatto: come si fa?
- 27. Multithreading in JavaFX si blocca l'interfaccia utente
- 28. problemi mysqldump con l'errore di ripristino: 'Si prega di scartare il tablespace prima dell'importazione'
- 29. JavaFX Più colori in textarea (JavaFX 8)
- 30. CubicCurve JavaFX
Non si dovrebbe fare questo con una sola classe: è molto cattiva pratica di miscelare questi pezzi diversi di funzionalità (connessione al database, da un lato, l'interfaccia utente d'altra parte) in un unico luogo. Separalo in diversi componenti. –
@James_D non ho detto di farlo con una sola classe I ment che voglio un buon esempio semplice pulito e chiaro di una classe che collega il mio progetto JavaFX per un database MySQL e un esempio di come ottenere i dati dal database in un tavolo. Non ho mai visto niente di simile su Google o YouTube o Facebook o StackOverflow ecc – marcS
Beh, ci sono centinaia di esempi di visualizzazione dei dati in un 'TableView', e centinaia di esempi di recupero di dati da un database. Metterò qualcosa insieme ma non sono sicuro di cosa esista che non esista altrove. –