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
Trả lời
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)
cảm ơn bạn rất nhiều – marcS
Câu trả lời thú vị. Cảm ơn! –
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.
- 1. Android.os.Build ví dụ dữ liệu, xin vui lòng
- 2. Làm thế nào để sử dụng jQuery qTip - Ví dụ đơn giản xin vui lòng
- 3. Giải thích xin vui lòng AngularJS $ injector với một ví dụ rõ ràng
- 4. JSF xin vui lòng không thoát khỏi html của tôi
- 5. JavaCC: Vui lòng cho tôi liên kết đến các ví dụ "thực"
- 6. Xin vui lòng giúp tôi hiểu khái niệm về các monads bên trong và bên ngoài
- 7. WebStorm - Lỗi: Xin vui lòng ghi rõ gói NPM
- 8. Ví dụ về OpenID kết nối Flask cơ bản
- 9. Ví dụ về JGraphT
- 10. Vui lòng giải thích mã ví dụ cudaMemcpyToSymbol từ Hướng dẫn lập trình CUDA
- 11. Hãy cho tôi một số bài tập javascript xin vui lòng
- 12. Tôi đang đọc Eloquent Javascript và tôi hơi bối rối bởi ví dụ chức năng một phần này. Xin vui lòng giúp giải thích
- 13. Ví dụ về pysmb
- 14. PHP + JQuery - Cách sử dụng hai giá trị này cùng nhau? Vui lòng xem ví dụ của tôi
- 15. Không đăng nhập được. Vui lòng kiểm tra kết nối mạng của bạn và thử lại
- 16. Talend Open Studio ESB phản hồi người dùng xin vui lòng (so với jbossesb/mule/servicemix)
- 17. Ví dụ về Tcl/Tk?
- 18. Ví dụ về lỗ hổng UDP NAT
- 19. Ví dụ về NSOutlineView và NSTreeController
- 20. Vui lòng giải thích về kết quả này của Symfony2 và ZendFramework 2
- 21. Chức năng băm hoàn hảo và băm hoàn hảo động - giải thích xin vui lòng?
- 22. wxPython Ví dụ về WebView
- 23. Ví dụ hay về MapServer/OpenLayers
- 24. Khung web hiệu quả hơn Web.py? Cực kỳ Pythonic xin vui lòng!
- 25. IPython máy tính xách tay luôn cho thấy "hạt nhân bắt đầu, xin vui lòng chờ ..."
- 26. đây có phải là lỗi không? xin vui lòng kiểm tra xem nó ra
- 27. Làm cách nào để lặp qua bảng chữ cái bằng Python, Xin vui lòng?
- 28. adobe air vs flex vs flash builder --- tôi cần giải thích xin vui lòng
- 29. Ví dụ về Amazon RDS MySQL thực hiện rất chậm
- 30. Ví dụ về thiết kế JavaScript API
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. –
@ 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
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. –