mysql javafx-2

Ejemplo de conexión JavaFX MySQL por favor



javafx-2 (2)

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 con 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 vino con IntelliJ y estaba ubicado en /Users/martin/Library/Preferences/IntelliJIdea2017.1/jdbc-drivers/MySQL Connector/J/5.1.40/mysql-connector-java-5.1.40-bin.jar

Los kudo pertenecen a James_D.

¿Alguien puede darme un ejemplo de una clase que conecte JavaFX con MySQL, no quiera la clase Main, tenga una, solo quiera un ejemplo de una clase que conecte cualquier aplicación a una base de datos MySQL y obtenga una fila de esa base de datos en una tabla? todo internet y no encontré nada directo al punto, no quiero nada lujoso, solo algo para hacer el trabajo, por favor. Algo limpio y simple.


Como mínimo, necesita tres clases: una para representar sus datos, otra para su interfaz de usuario 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 de TableView

Supongamos que su base de datos tiene una tabla de person con tres columnas, nombre, last_name , dirección de 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<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 }

Y luego una clase de interfaz de usuario:

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); } }

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