2014-09-03 56 views
7

Bất cứ ai có thể cho tôi một ví dụ về một lớp kết nối JavaFX với MySQL, không muốn lớp Main, có một, chỉ muốn một ví dụ về một lớp kết nối bất kỳ ứng dụng nào với cơ sở dữ liệu MySQL. từ cơ sở dữ liệu đó vào một bảng, tìm kiếm trên toàn bộ internet và tôi đã không tìm thấy bất cứ điều gì thẳng đến mức tôi không muốn bất cứ điều gì ưa thích chỉ là một cái gì đó để có được công việc làm xin vui lòng. Một cái gì đó sạch sẽ và đơn giản.Ví dụ về kết nối MySQL của JavaFX xin vui lòng

+0

Bạn không nên làm điều này với một lớp: thực tiễn rất xấu để trộn các phần chức năng khác nhau (một mặt, giao diện cơ sở dữ liệu) ở một nơi. Tách nó thành các thành phần khác nhau. –

+0

@ James_D tôi đã không nói để làm điều đó với một lớp tôi nghĩ rằng tôi muốn một ví dụ đơn giản và rõ ràng đơn giản của một lớp kết nối dự án javaFX của tôi với cơ sở dữ liệu MySQL và một ví dụ về cách lấy dữ liệu từ cơ sở dữ liệu vào một cái bàn. Tôi đã không thấy bất cứ điều gì giống như nó trên google hoặc youtube hoặc facebook hoặc stackoverflow vv – marcS

+0

Vâng, có hàng trăm ví dụ về hiển thị dữ liệu trong một 'TableView', và hàng trăm ví dụ về lấy dữ liệu từ cơ sở dữ liệu. Tôi sẽ đặt một cái gì đó với nhau nhưng tôi không chắc chắn những gì có mà không tồn tại ở nơi khác. –

Trả lời

16

Tối thiểu, bạn cần ba lớp: một để biểu thị dữ liệu của bạn, một cho giao diện người dùng và một để quản lý kết nối cơ sở dữ liệu. Trong một ứng dụng thực tế, bạn cần nhiều hơn thế này, tất nhiên. Ví dụ này sau các ví dụ cơ bản giống như TableView tutorial

Giả sử cơ sở dữ liệu của bạn có một bảng person với ba cột, first_name, last_name, email_address.

Sau đó, bạn sẽ viết một lớp 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); 
    } 

} 

Một lớp để truy cập dữ liệu từ cơ sở dữ liệu:

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 
} 

Và sau đó là một lớp giao diện người dùng:

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

(Tôi chỉ cần gõ vào đó mà không cần kiểm tra, vì vậy có thể có lỗi chính tả, thiếu nhập, vv, nhưng nó sho ULD là đủ để cung cấp cho bạn những ý tưởng)

+0

cảm ơn bạn rất nhiều – marcS

+0

Câu trả lời thú vị. Cảm ơn! –

1

Ngoài các câu trả lời của James_D:.

Tôi muốn kết nối với một (MySQL) cơ sở dữ liệu từ xa, vì vậy tôi đã thay đổi các nhà xây dựng và nối với nhau bằng url chỉ:

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

Init qua:

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

Xin lưu ý: Bạn cũng sẽ cần phải bao gồm lib của trình kết nối. Tôi đã chọn mysql-connector-java-5.1.40-bin.jar đi kèm với IntelliJ và được đặt dưới /Users/martin/Library/Preferences/IntelliJIdea2017.1/jdbc-drivers/MySQL Connector/J/5.1.40/mysql-connector-java-5.1.40-bin.jar

Kudos thuộc về James_D.

Các vấn đề liên quan