Ejemplo de conexión JavaFX MySQL por favor

¿Alguien puede darme un ejemplo de una clase que conecta JavaFX con MySQL, no desea clase principal, tiene uno, solo quiere un ejemplo de una clase que conecta cualquier aplicación a una base de datos MySQL y obtiene una fila de esa base de datos en una tabla, buscada todo el internet y no encontré nada directo al punto, no quiero nada que sea elegante para hacer el trabajo, por favor. Algo limpio y simple.

Como mínimo, necesita tres clases: una para representar sus datos, una para su UI y otra para administrar la conexión de la base de datos. En una aplicación real necesitarías más que esto, por supuesto. Este ejemplo sigue el mismo ejemplo básico que el tutorial TableView

Supongamos que su base de datos tiene una tabla de person con tres columnas, first_name , last_name , last_name .

Entonces escribirías una clase de 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 clase para acceder a los datos de la base de datos:

 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 getPersonList() throws SQLException { try ( Statement stmnt = connection.createStatement(); ResultSet rs = stmnt.executeQuery("select * from person"); ){ List 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 } 

Y luego una clase de UI:

 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 personTable = new TableView<>(); TableColumn firstNameCol = new TableColumn<>("First Name"); firstNameCol.setCellValueFactory(new PropertyValueFactory<>("firstName")); TableColumn lastNameCol = new TableColumn<>("Last Name"); lastNameCol.setCellValueFactory(new PropertyValueFactory<>("lastName")); TableColumn 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); } } 

(Simplemente tecleé eso sin pruebas, por lo que puede haber errores tipográficos, importaciones faltantes, etc., pero debería ser suficiente para darle la idea).

Además de la respuesta de James_D :

Quería conectarme a una base de datos remota (MySQL), así que cambié el constructor y me conecté solo por url:

 public UserAccessor(String dbURL, String user, String password) throws SQLException, ClassNotFoundException { connection = DriverManager.getConnection(dbURL, user, password); } 

Init vía:

 UserAccessor userAccessor = new UserAccessor( "jdbc:mysql://xxx.xxx.xxx.xxx:YOUR_PORT", "YOUR_DB_USER", "YOUR_PASSWORD") 

Tenga en cuenta: también deberá incluir el conector lib. Elegí mysql-connector-java-5.1.40-bin.jar que venía con IntelliJ y se encontraba en /Users/martin/Library/Preferences/IntelliJIdea2017.1/jdbc-drivers/MySQL Connector/J/5.1.40/mysql-connector-java-5.1.40-bin.jar

Los cumplidos pertenecen a James_D.