有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javafxmysql连接示例

有谁能给我举一个连接JavaFX和MySQL的类的例子,不需要主类,只需要一个连接任何应用程序到MySQL数据库并从该数据库获取一行到一个表的类的例子,搜索了整个互联网,我没有直接找到任何东西,我不想要任何花哨的东西,只是为了完成工作。 干净简单的东西


共 (2) 个答案

  1. # 1 楼答案

    除了James_D的答案之外:

    我想连接到一个远程(MySQL)数据库,所以我更改了构造函数,只通过url连接:

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

    初始化通过:

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

    请注意: 您还需要包括连接器库。我选择了IntelliJ附带的mysql-connector-java-5.1.40-bin.jar,它位于/Users/martin/Library/Preferences/IntelliJIdea2017.1/jdbc-drivers/MySQL Connector/J/5.1.40/mysql-connector-java-5.1.40-bin.jar

    荣誉属于詹姆斯·D.

  2. # 2 楼答案

    至少需要三个类:一个用于表示数据,一个用于UI,一个用于管理数据库连接。当然,在真正的应用程序中,你需要的不仅仅是这些。这个例子遵循与^{} tutorial相同的基本例子

    假设您的数据库有一个person表,其中有三列,first_namelast_nameemail_address

    然后你会写一个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);
        }
    
    }
    

    用于访问数据库中数据的类:

    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
    }
    

    然后是一个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<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);
        }
    }
    

    (我只是在没有测试的情况下输入,所以可能会有输入错误、缺少导入等,但这应该足以让您了解情况。)