2014-09-03 7 views
7

क्या कोई मुझे एक वर्ग का एक उदाहरण दे सकता है जो जावाएफएक्स को MySQL से जोड़ता है, मुख्य श्रेणी नहीं चाहता है, केवल एक वर्ग का उदाहरण चाहिए जो किसी भी एप्लिकेशन को MySQL डेटाबेस से जोड़ता है और एक पंक्ति प्राप्त करता है उस डेटाबेस से एक टेबल में, पूरे इंटरनेट की खोज की और मुझे सीधे बिंदु पर कुछ भी नहीं मिला, मुझे कुछ काम नहीं करना चाहिए, कृपया काम पूरा करने के लिए कुछ ही करें। कुछ साफ और सरल।जावाएफएक्स MySQL कनेक्शन उदाहरण कृपया

+0

आपको इसे एक वर्ग के साथ नहीं करना चाहिए: एक ही स्थान पर कार्यक्षमता के विभिन्न टुकड़ों (एक तरफ डेटाबेस कनेक्शन, दूसरी तरफ यूआई) मिश्रण करना बहुत बुरा अभ्यास है। इसे विभिन्न घटकों में अलग करें। –

+0

@James_D मैंने इसे एक वर्ग के साथ नहीं करने के लिए कहा था, मुझे लगता है कि मैं एक क्लास का एक अच्छा सरल साफ और स्पष्ट उदाहरण चाहता हूं जो मेरे जावाएक्सएक्स प्रोजेक्ट को एक MySQL डेटाबेस से जोड़ता है और डेटाबेस से डेटा कैसे प्राप्त करें इसका एक उदाहरण एक टेबल में मैंने Google या यूट्यूब या फेसबुक या स्टैक ओवरफ्लो आदि पर ऐसा कुछ नहीं देखा है। – marcS

+0

ठीक है, 'टेबल व्यू' में डेटा प्रदर्शित करने के सैकड़ों उदाहरण हैं, और डेटाबेस से डेटा पुनर्प्राप्त करने के सैकड़ों उदाहरण हैं। मैं कुछ एक साथ रखूंगा लेकिन मुझे यकीन नहीं है कि वहां कहीं और मौजूद नहीं है। –

उत्तर

16

कम से कम, आपको तीन कक्षाओं की आवश्यकता है: एक आपके डेटा का प्रतिनिधित्व करने के लिए, एक यूआई के लिए एक, और एक डेटाबेस कनेक्शन का प्रबंधन करने के लिए। एक वास्तविक ऐप में आपको निश्चित रूप से इससे अधिक की आवश्यकता होगी। इस उदाहरण TableView tutorial

के रूप में एक ही मूल उदाहरण मान लीजिए कि आपकी डेटाबेस तीन कॉलम, first_name, last_name, email_address के साथ एक person टेबल है इस प्रकार है। एक यूआई वर्ग

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 
} 

और फिर:

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

} 

डेटाबेस से डेटा का उपयोग करने के एक वर्ग:

तो फिर तुम एक Person वर्ग लिखते थे

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

(मैंने बस परीक्षण किए बिना टाइप किया है, इसलिए टाइपो, लापता आयात आदि हो सकते हैं, लेकिन यह शू आप विचार दे करने के लिए पर्याप्त uld)

+0

आपको बहुत बहुत धन्यवाद – marcS

+0

बहुत बढ़िया जवाब। धन्यवाद! –

1

James_D के जवाब के अलावा:।

मैं एक दूरस्थ (MySQL) डेटाबेस से कनेक्ट करना चाहता था, इसलिए मैं निर्माता बदल गया है और द्वारा यूआरएल केवल से जुड़े:

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

Init के माध्यम से:

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

कृपया ध्यान दें: तुम भी करने की आवश्यकता होगी कनेक्टर lib शामिल करें। मैंने 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 से संबंधित है।

संबंधित मुद्दे