JavaFX এবং Database Integration

Java Technologies - জাভাএফএক্স (JavaFx)
187
187

JavaFX এবং Database Integration এর মাধ্যমে আপনি JavaFX অ্যাপ্লিকেশনের সাথে ডেটাবেস সংযোগ তৈরি করতে পারেন, যাতে আপনার অ্যাপ্লিকেশন ডেটা সংরক্ষণ, পুনরুদ্ধার এবং আপডেট করতে সক্ষম হয়। JavaFX এবং ডেটাবেসের মধ্যে সংযোগ স্থাপন করার জন্য সাধারণত JDBC (Java Database Connectivity) ব্যবহার করা হয়।

JavaFX এবং Database Integration এর জন্য সাধারণ পদক্ষেপ:

  1. JDBC Setup:
    • JavaFX অ্যাপ্লিকেশন এবং ডেটাবেসের মধ্যে সংযোগ স্থাপন করতে আপনাকে JDBC API ব্যবহার করতে হবে। JDBC ব্যবহার করে আপনি ডেটাবেসে সংযোগ তৈরি, ডেটা গ্রহণ এবং ডেটা আপডেট করতে পারবেন।
  2. Database Selection:
    • সাধারণত, MySQL, SQLite, PostgreSQL অথবা Oracle ডেটাবেস ব্যবহৃত হয়। JDBC ড্রাইভার ইনস্টল এবং কনফিগার করতে হয়, যাতে JavaFX অ্যাপ্লিকেশন ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে পারে।

JDBC Setup:

প্রথমে, আপনাকে ডেটাবেস ড্রাইভারকে JavaFX অ্যাপ্লিকেশন-এ যুক্ত করতে হবে। উদাহরণস্বরূপ, MySQL JDBC ড্রাইভার

MySQL JDBC Driver Configuration (Maven Example):

pom.xml ফাইলে MySQL JDBC ড্রাইভার যুক্ত করুন:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version> <!-- Version may vary -->
</dependency>

Database Connection Example:

এখানে একটি সাধারণ উদাহরণ দেওয়া হয়েছে যেখানে JavaFX অ্যাপ্লিকেশন MySQL ডেটাবেসের সাথে সংযুক্ত হচ্ছে এবং ডেটা প্রদর্শন করছে।

JavaFX এবং MySQL Database Integration Example:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DatabaseIntegrationExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // Button to connect to the database
        Button btn = new Button("Connect to Database");

        // Button action handler
        btn.setOnAction(e -> {
            connectToDatabase();
        });

        // Layout setup
        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("JavaFX and Database Integration");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    // Method to connect to the database
    private void connectToDatabase() {
        // Database URL, username, password
        String url = "jdbc:mysql://localhost:3306/yourdatabase";  // Replace with your database URL
        String user = "root";  // Replace with your MySQL username
        String password = "password";  // Replace with your MySQL password

        try {
            // Establish connection to the database
            Connection connection = DriverManager.getConnection(url, user, password);
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT * FROM your_table"); // Replace with your table name

            // Loop through the results and display them
            while (resultSet.next()) {
                String data = resultSet.getString("your_column_name"); // Replace with your column name
                System.out.println(data);
            }

            // Success message
            showAlert(AlertType.INFORMATION, "Database Connection", "Connected successfully!");

        } catch (Exception e) {
            e.printStackTrace();
            // Error message
            showAlert(AlertType.ERROR, "Database Connection", "Failed to connect to the database.");
        }
    }

    // Method to show alerts
    private void showAlert(AlertType type, String title, String content) {
        Alert alert = new Alert(type);
        alert.setTitle(title);
        alert.setContentText(content);
        alert.showAndWait();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

বিবরণ:

  1. JDBC Connection:
    • DriverManager.getConnection() ব্যবহার করে MySQL ডেটাবেসে সংযোগ স্থাপন করা হয়েছে।
    • ResultSet এবং Statement ব্যবহার করে ডেটাবেস থেকে ডেটা আহরণ করা হচ্ছে।
  2. UI Interaction:
    • JavaFX UI তে একটি বাটন রয়েছে। ইউজার বাটনে ক্লিক করলে ডেটাবেসের সাথে সংযোগ স্থাপন এবং ডেটা রিট্রিভ করা হয়।
  3. Alert:
    • ডেটাবেসের সংযোগ সফল হলে বা ব্যর্থ হলে একটি Alert তৈরি করা হয়, যা ইউজারকে জানায়।

Database Query Execution:

1. SQL Query for Inserting Data:

String insertQuery = "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')";
statement.executeUpdate(insertQuery);

2. SQL Query for Updating Data:

String updateQuery = "UPDATE your_table SET column1 = 'newValue' WHERE column2 = 'value2'";
statement.executeUpdate(updateQuery);

3. SQL Query for Deleting Data:

String deleteQuery = "DELETE FROM your_table WHERE column1 = 'value1'";
statement.executeUpdate(deleteQuery);

Handling Database Exceptions:

ডেটাবেসের সাথে কাজ করার সময় যদি কোনও সমস্যা হয় (যেমন সংযোগ ব্যর্থতা, সঠিক SQL প্রশ্ন না হওয়া ইত্যাদি), তাহলে SQLException হ্যান্ডেল করতে হবে।

try {
    // ডেটাবেস অপারেশন
} catch (SQLException e) {
    // Exception handling
    e.printStackTrace();
}

Using Prepared Statements for Security:

SQL Injection এড়ানোর জন্য PreparedStatement ব্যবহার করা উত্তম।

String query = "INSERT INTO your_table (column1, column2) VALUES (?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, "value1");
preparedStatement.setString(2, "value2");
preparedStatement.executeUpdate();

JavaFX TableView with Database Integration:

JavaFX TableView ব্যবহার করে আপনি ডেটাবেসের ডেটা টেবিল আকারে প্রদর্শন করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো:

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DatabaseTableViewExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // Create TableView
        TableView<Data> table = new TableView<>();
        
        // Create columns
        TableColumn<Data, String> column1 = new TableColumn<>("Column1");
        column1.setCellValueFactory(cellData -> cellData.getValue().column1Property());
        
        TableColumn<Data, String> column2 = new TableColumn<>("Column2");
        column2.setCellValueFactory(cellData -> cellData.getValue().column2Property());

        // Add columns to table
        table.getColumns().add(column1);
        table.getColumns().add(column2);
        
        // Fetch data from database and populate TableView
        fetchDataFromDatabase(table);

        // Layout and Scene setup
        StackPane root = new StackPane();
        root.getChildren().add(table);
        Scene scene = new Scene(root, 600, 400);
        primaryStage.setTitle("Database TableView Example");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void fetchDataFromDatabase(TableView<Data> table) {
        String url = "jdbc:mysql://localhost:3306/yourdatabase";
        String user = "root";
        String password = "password";
        
        try {
            Connection connection = DriverManager.getConnection(url, user, password);
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT column1, column2 FROM your_table");

            while (resultSet.next()) {
                // Adding rows to TableView
                table.getItems().add(new Data(resultSet.getString("column1"), resultSet.getString("column2")));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }

    // Data class for TableView rows
    public static class Data {
        private final SimpleStringProperty column1;
        private final SimpleStringProperty column2;

        public Data(String column1, String column2) {
            this.column1 = new SimpleStringProperty(column1);
            this.column2 = new SimpleStringProperty(column2);
        }

        public String getColumn1() {
            return column1.get();
        }

        public SimpleStringProperty column1Property() {
            return column1;
        }

        public String getColumn2() {
            return column2.get();
        }

        public SimpleStringProperty column2Property() {
            return column2;
        }
    }
}
  • JavaFX এবং Database Integration ব্যবহারের মাধ্যমে আপনি JavaFX অ্যাপ্লিকেশনগুলির সাথে ডেটাবেস সংযোগ স্থাপন করে ডেটা সংরক্ষণ, আপডেট এবং রিট্রিভ করতে পারেন।
  • JDBC ব্যবহার করে ডেটাবেসের সাথে যোগাযোগ করা হয় এবং TableView এর মতো UI উপাদান ব্যবহার করে ডেটা ভিজ্যুয়ালাইজ করা হয়।
  • PreparedStatement ব্যবহার করা উচিত নিরাপত্তার জন্য, বিশেষ করে SQL Injection থেকে রক্ষা পাওয়ার জন্য।
Content added By

JavaFX এবং JDBC এর মাধ্যমে Database সংযোগ

101
101

JavaFX এবং JDBC (Java Database Connectivity) ব্যবহার করে আপনি JavaFX অ্যাপ্লিকেশন থেকে ডাটাবেসের সাথে সংযোগ স্থাপন এবং ডাটা অ্যাক্সেস করতে পারেন। JDBC একটি API যা Java অ্যাপ্লিকেশনগুলোকে রিলেশনাল ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করতে সহায়তা করে। JavaFX দিয়ে ইউজার ইন্টারফেস তৈরি করার পাশাপাশি, JDBC ব্যবহার করে ডাটাবেসের সাথে কাজ করা সম্ভব।

JavaFX এবং JDBC দিয়ে ডাটাবেস সংযোগ

JDBC এর মাধ্যমে ডাটাবেস সংযোগ করার জন্য সাধারণত কয়েকটি ধাপ অনুসরণ করতে হয়:

  1. JDBC ড্রাইভার লোড করা: ডাটাবেসের সাথে সংযোগ স্থাপনের জন্য ড্রাইভার ক্লাস লোড করা হয়।
  2. ডাটাবেস সংযোগ: DriverManager.getConnection() ব্যবহার করে ডাটাবেসের সাথে সংযোগ স্থাপন করা হয়।
  3. SQL স্টেটমেন্ট: ডাটাবেসে কুইরি বা কমান্ড পাঠানো হয়।
  4. ডাটাবেস থেকে ডাটা রিট্রিভ করা: ResultSet এর মাধ্যমে ডাটাবেস থেকে ডাটা সংগ্রহ করা হয়।
  5. ডাটাবেস সংযোগ বন্ধ করা: কাজ শেষে ডাটাবেস সংযোগ বন্ধ করা হয়।

JavaFX এবং JDBC এর মাধ্যমে ডাটাবেস সংযোগ উদাহরণ:

এই উদাহরণে আমরা একটি MySQL ডাটাবেসের সাথে সংযোগ স্থাপন এবং তিনটি কলাম সহ একটি সিম্পল টেবিল থেকে ডাটা প্রদর্শন করব।

ধাপ 1: MySQL ড্রাইভার ডিপেনডেন্সি (pom.xml for Maven):

প্রথমে, আপনার pom.xml (যদি আপনি Maven ব্যবহার করেন) ফাইলে MySQL JDBC ড্রাইভার ডিপেনডেন্সি যোগ করুন।

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version> <!-- Use the appropriate version -->
    </dependency>
</dependencies>

ধাপ 2: ডাটাবেস সংযোগ স্থাপন এবং ডাটা রিট্রিভ করা

JavaFX অ্যাপ্লিকেশন থেকে JDBC ব্যবহার করে ডাটাবেসের সাথে সংযোগ এবং ডাটা রিট্রিভ করার জন্য একটি সিম্পল উদাহরণ:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

import java.sql.*;

public class JavaFXJDBCExample extends Application {

    private final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase";  // ডাটাবেস URL
    private final String USER = "root";  // ডাটাবেস ইউজার
    private final String PASS = "password";  // ডাটাবেস পাসওয়ার্ড

    private TableView<Person> tableView = new TableView<>();  // TableView ব্যবহার করে ডাটা প্রদর্শন
    private ObservableList<Person> personList = FXCollections.observableArrayList();

    @Override
    public void start(Stage primaryStage) {
        // ডাটাবেস থেকে ডাটা রিট্রিভ করা
        retrieveDataFromDatabase();

        // কলাম গুলি তৈরি করা
        TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
        nameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());

        TableColumn<Person, Integer> ageColumn = new TableColumn<>("Age");
        ageColumn.setCellValueFactory(cellData -> cellData.getValue().ageProperty().asObject());

        TableColumn<Person, String> cityColumn = new TableColumn<>("City");
        cityColumn.setCellValueFactory(cellData -> cellData.getValue().cityProperty());

        // টেবিলে কলাম যোগ করা
        tableView.getColumns().addAll(nameColumn, ageColumn, cityColumn);
        tableView.setItems(personList);

        // StackPane তৈরি করা
        StackPane root = new StackPane();
        root.getChildren().add(tableView);

        // Scene তৈরি এবং সেট করা
        Scene scene = new Scene(root, 500, 400);
        primaryStage.setTitle("JavaFX JDBC Example");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    // ডাটাবেস থেকে ডাটা রিট্রিভ করা
    private void retrieveDataFromDatabase() {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // ডাটাবেস সংযোগ স্থাপন করা
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            stmt = conn.createStatement();

            // SQL কুয়েরি চালানো
            String sql = "SELECT name, age, city FROM people";
            rs = stmt.executeQuery(sql);

            // রেকর্ডগুলির ওপর লুপ করে ডাটা প্রক্রিয়া করা
            while (rs.next()) {
                String name = rs.getString("name");
                int age = rs.getInt("age");
                String city = rs.getString("city");

                // Person অবজেক্ট তৈরি করে ObservableList এ যোগ করা
                personList.add(new Person(name, age, city));
            }
        } catch (SQLException e) {
            showAlert("Database Error", "Error retrieving data from the database: " + e.getMessage(), AlertType.ERROR);
        } finally {
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                showAlert("Error", "Error closing resources: " + e.getMessage(), AlertType.ERROR);
            }
        }
    }

    // Error Message দেখানোর জন্য Helper Method
    private void showAlert(String title, String message, AlertType alertType) {
        Alert alert = new Alert(alertType);
        alert.setTitle(title);
        alert.setHeaderText(null);
        alert.setContentText(message);
        alert.showAndWait();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

// Person class for TableView item representation
class Person {
    private final javafx.beans.property.SimpleStringProperty name;
    private final javafx.beans.property.SimpleIntegerProperty age;
    private final javafx.beans.property.SimpleStringProperty city;

    public Person(String name, int age, String city) {
        this.name = new javafx.beans.property.SimpleStringProperty(name);
        this.age = new javafx.beans.property.SimpleIntegerProperty(age);
        this.city = new javafx.beans.property.SimpleStringProperty(city);
    }

    public javafx.beans.property.SimpleStringProperty nameProperty() {
        return name;
    }

    public javafx.beans.property.SimpleIntegerProperty ageProperty() {
        return age;
    }

    public javafx.beans.property.SimpleStringProperty cityProperty() {
        return city;
    }
}

এখানে কী হচ্ছে?

  1. JDBC ডাটাবেস সংযোগ: DriverManager.getConnection() ব্যবহার করে MySQL ডাটাবেসের সাথে সংযোগ স্থাপন করা হয়েছে।
  2. SQL কুয়েরি চালানো: SELECT কুয়েরি ব্যবহার করে people টেবিল থেকে ডাটা রিট্রিভ করা হচ্ছে।
  3. TableView: JavaFX TableView ব্যবহার করে ডাটাবেস থেকে পাওয়া ডাটা ইউজারের জন্য প্রদর্শন করা হচ্ছে।
  4. Person Class: Person ক্লাস একটি POJO (Plain Old Java Object) যা TableView এর জন্য ডাটা ধারণ করে।

MySQL ডাটাবেস সন্নিবেশ (Database Structure Example):

ধরা যাক, আপনি যে ডাটাবেস থেকে ডাটা রিট্রিভ করছেন তার নাম mydatabase এবং টেবিলের নাম people। এর সঠিক কাঠামো হতে পারে এমন:

CREATE DATABASE mydatabase;

USE mydatabase;

CREATE TABLE people (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    age INT,
    city VARCHAR(100)
);

INSERT INTO people (name, age, city) VALUES ('John Doe', 25, 'New York');
INSERT INTO people (name, age, city) VALUES ('Jane Smith', 30, 'Los Angeles');

সারাংশ:

  • JavaFX এবং JDBC এর মাধ্যমে আপনি একটি ডাটাবেসের সাথে সংযোগ স্থাপন এবং ডাটা রিট্রিভ করে ইউজার ইন্টারফেসে প্রদর্শন করতে পারেন।
  • এখানে, JavaFX এর TableView ব্যবহৃত হয়েছে, যা ডাটাবেস থেকে পাওয়া ডাটা সুন্দরভাবে প্রদর্শন করে। JDBC ব্যবহার করে ডাটাবেসে SELECT কুয়েরি চালিয়ে ডাটা রিট্রিভ করা হয়েছে।
Content added By

Database থেকে Data Fetch করা এবং UI তে প্রদর্শন করা

103
103

JavaFX দিয়ে ডাটাবেস থেকে ডেটা ফেচ করা এবং UI তে প্রদর্শন করা একটি সাধারণ কাজ, যা অনেক অ্যাপ্লিকেশনে প্রয়োজন হয়। আমরা JDBC (Java Database Connectivity) ব্যবহার করে ডেটাবেসের সাথে সংযোগ স্থাপন করি এবং তারপর JavaFX UI উপাদান (যেমন TableView, ListView, বা TextField) এ ডেটা প্রদর্শন করি।

ডাটাবেস থেকে ডেটা ফেচ করার জন্য ধাপগুলি:

  1. ডাটাবেস সংযোগ স্থাপন (JDBC ব্যবহার করে)
  2. ডেটা ফেচ করা (SQL কুয়েরি ব্যবহার করে)
  3. ডেটা UI তে প্রদর্শন করা (JavaFX Controls যেমন TableView, ListView, ইত্যাদি ব্যবহার করে)

প্রসেসের বিস্তারিত উদাহরণ:

আমরা একটি সাধারণ MySQL ডাটাবেস থেকে ডেটা ফেচ করে একটি TableView তে প্রদর্শন করার উদাহরণ দেখব।

Step 1: JDBC ড্রাইভার যোগ করা

প্রথমে, আপনি আপনার প্রজেক্টে JDBC ড্রাইভার যোগ করতে হবে। যদি আপনি Maven ব্যবহার করেন, তাহলে আপনাকে MySQL JDBC ড্রাইভার ডিপেনডেন্সি পম.এক্সএমএল ফাইলে যোগ করতে হবে।

Maven Dependency:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version> <!-- Use the latest version -->
</dependency>

Step 2: ডাটাবেসে সংযোগ স্থাপন

এখানে একটি MySQL ডাটাবেস থেকে ডেটা ফেচ করার জন্য JDBC ব্যবহার করা হচ্ছে। আমরা একটি সিম্পল টেবিল students ব্যবহার করব, যা কিছু শিক্ষার্থীর তথ্য ধারণ করবে।

MySQL Database Example:

CREATE DATABASE school;
USE school;

CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    age INT
);

INSERT INTO students (name, age) VALUES ('John Doe', 20), ('Jane Smith', 22), ('Sam Brown', 23);

Step 3: JavaFX UI এবং ডাটাবেস থেকে ডেটা ফেচ করা

এখন আমরা একটি JavaFX অ্যাপ্লিকেশন তৈরি করব যা ডাটাবেস থেকে ডেটা ফেচ করবে এবং TableView তে তা প্রদর্শন করবে।

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DatabaseExample extends Application {

    // TableView এবং Column তৈরি করা
    private TableView<Student> table = new TableView<>();
    private final ObservableList<Student> data = FXCollections.observableArrayList();

    @Override
    public void start(Stage stage) {
        // Column তৈরি
        TableColumn<Student, String> nameColumn = new TableColumn<>("Name");
        nameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());

        TableColumn<Student, Integer> ageColumn = new TableColumn<>("Age");
        ageColumn.setCellValueFactory(cellData -> cellData.getValue().ageProperty().asObject());

        // TableView এ কলাম যোগ করা
        table.getColumns().addAll(nameColumn, ageColumn);

        // ডেটা লোড করা
        loadDataFromDatabase();

        // TableView UI-তে যোগ করা
        StackPane root = new StackPane();
        root.getChildren().add(table);

        // Scene তৈরি এবং Stage সেট করা
        Scene scene = new Scene(root, 300, 250);
        stage.setTitle("Database Data in JavaFX");
        stage.setScene(scene);
        stage.show();
    }

    private void loadDataFromDatabase() {
        // ডাটাবেস থেকে ডেটা ফেচ করা
        String url = "jdbc:mysql://localhost:3306/school";
        String user = "root";
        String password = "password"; // আপনার ডাটাবেস পাসওয়ার্ড দিন

        try (Connection connection = DriverManager.getConnection(url, user, password);
             Statement stmt = connection.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM students")) {

            // ডেটাবেস থেকে ডেটা ফেচ এবং ObservableList-এ যোগ করা
            while (rs.next()) {
                String name = rs.getString("name");
                int age = rs.getInt("age");
                data.add(new Student(name, age));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        // TableView এ ডেটা যোগ করা
        table.setItems(data);
    }

    public static void main(String[] args) {
        launch(args);
    }

    // Student ক্লাস (Model)
    public static class Student {
        private final javafx.beans.property.SimpleStringProperty name;
        private final javafx.beans.property.SimpleIntegerProperty age;

        public Student(String name, int age) {
            this.name = new javafx.beans.property.SimpleStringProperty(name);
            this.age = new javafx.beans.property.SimpleIntegerProperty(age);
        }

        public String getName() {
            return name.get();
        }

        public javafx.beans.property.SimpleStringProperty nameProperty() {
            return name;
        }

        public int getAge() {
            return age.get();
        }

        public javafx.beans.property.SimpleIntegerProperty ageProperty() {
            return age;
        }
    }
}

এখানে কী হচ্ছে?

  1. Student ক্লাস:
    • এটি একটি সিম্পল মডেল ক্লাস যা name এবং age ফিল্ড ধারণ করে। SimpleStringProperty এবং SimpleIntegerProperty ব্যবহার করে, JavaFX এর প্রপার্টি মেকানিজম সক্রিয় করা হয়েছে, যা UI এ ডেটার পরিবর্তন স্বয়ংক্রিয়ভাবে রিফ্রেশ করতে সাহায্য করবে।
  2. loadDataFromDatabase() মেথড:
    • এখানে JDBC ব্যবহার করে MySQL ডাটাবেসে সংযোগ করা হয়েছে এবং SELECT * FROM students কুয়েরি ব্যবহার করে ডেটা ফেচ করা হচ্ছে।
    • ফেচ করা ডেটা ObservableList এ যোগ করা হচ্ছে, যা পরবর্তীতে TableView তে প্রদর্শিত হবে।
  3. JavaFX UI:
    • একটি TableView তৈরি করা হয়েছে যাতে name এবং age কলাম থাকবে। ObservableList ডেটা থেকে কলামগুলো পূর্ণ হবে।
  4. TableColumn:
    • TableColumn তৈরি করা হয়েছে এবং প্রত্যেকটি কলামে cellValueFactory ব্যবহার করে ডেটার জন্য প্রপার্টি দেওয়া হয়েছে।

কিছু গুরুত্বপূর্ণ ব্যাপার:

  • ObservableList: এটি একটি List যা JavaFX UI কন্ট্রোলের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম। আপনি যখন এই লিস্টে ডেটা যোগ করেন, তখন UI তে তা স্বয়ংক্রিয়ভাবে আপডেট হয়ে যায়।
  • JDBC Exception Handling: ডাটাবেসে সংযোগ এবং কুয়েরি পাঠানোর সময় এক্সসেপশন হ্যান্ডলিং জরুরি। এটি ডাটাবেসের সাথে সঠিকভাবে কাজ নিশ্চিত করতে সাহায্য করে।

সারাংশ:

  • JDBC ব্যবহার করে ডাটাবেস থেকে ডেটা ফেচ করার এবং JavaFX UI তে তা প্রদর্শন করার জন্য আপনি TableView, TextField, ComboBox ইত্যাদি কন্ট্রোল ব্যবহার করতে পারেন।
  • ObservableList এবং TableView JavaFX এর ক্ষমতা রয়েছে যা ডেটা প্রদর্শন এবং লাইভ আপডেটের জন্য ব্যবহৃত হয়।
  • Database Connectivity JavaFX অ্যাপ্লিকেশনকে ডেটাবেসের সাথে সংযুক্ত করে এবং ডেটাকে UI তে প্রদর্শন করতে সক্ষম করে।
Content added By

TableView এর মাধ্যমে Database এর Data Binding

109
109

JavaFX TableView এর মাধ্যমে Database এর ডেটা data binding করার মাধ্যমে আপনি আপনার JavaFX অ্যাপ্লিকেশনে ডেটাবেসের ডেটা খুব সহজভাবে প্রদর্শন করতে পারেন। TableView একটি শক্তিশালী কন্ট্রোল যা সারণী আকারে ডেটা প্রদর্শন করার জন্য ব্যবহৃত হয় এবং data binding এর মাধ্যমে আপনি ডেটাবেসের ডেটা সরাসরি TableView-এ প্রদর্শন করতে পারেন।

এখানে, আমরা JDBC (Java Database Connectivity) ব্যবহার করে ডেটাবেস থেকে ডেটা নিয়ে, সেই ডেটাকে TableView এ প্রদর্শন করব।

ধাপ ১: প্রয়োজনীয় লাইব্রেরি

  • JDBC লাইব্রেরি আপনার প্রকল্পে যুক্ত করা থাকতে হবে। আপনি যদি MySQL ব্যবহার করেন, তবে MySQL JDBC ড্রাইভার ইনস্টল করতে হবে। (যেমন mysql-connector-java জার ফাইল)

ধাপ ২: ডেটাবেস তৈরি এবং ডেটা সন্নিবেশ

আমরা একটি সাধারণ MySQL ডেটাবেস তৈরি করব এবং সেখানে কিছু ডেটা সন্নিবেশ করব।

CREATE DATABASE mydb;

USE mydb;

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    age INT,
    department VARCHAR(100)
);

INSERT INTO employees (name, age, department) VALUES
('John Doe', 30, 'Engineering'),
('Jane Smith', 25, 'Marketing'),
('Emily Johnson', 35, 'HR');

ধাপ ৩: JavaFX TableView Data Binding Example

এখন, JavaFX অ্যাপ্লিকেশনে TableView ব্যবহার করে ডেটাবেসের ডেটা প্রদর্শন করব।

JavaFX TableView Data Binding Example:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;

import java.sql.*;

public class TableViewDatabaseBindingExample extends Application {

    // Employee class to represent data from the database
    public static class Employee {
        private final int id;
        private final String name;
        private final int age;
        private final String department;

        public Employee(int id, String name, int age, String department) {
            this.id = id;
            this.name = name;
            this.age = age;
            this.department = department;
        }

        public int getId() {
            return id;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        public String getDepartment() {
            return department;
        }
    }

    @Override
    public void start(Stage primaryStage) {
        // Create TableView and define columns
        TableView<Employee> tableView = new TableView<>();
        
        TableColumn<Employee, Integer> idColumn = new TableColumn<>("ID");
        idColumn.setCellValueFactory(new PropertyValueFactory<>("id"));

        TableColumn<Employee, String> nameColumn = new TableColumn<>("Name");
        nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

        TableColumn<Employee, Integer> ageColumn = new TableColumn<>("Age");
        ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));

        TableColumn<Employee, String> departmentColumn = new TableColumn<>("Department");
        departmentColumn.setCellValueFactory(new PropertyValueFactory<>("department"));

        tableView.getColumns().addAll(idColumn, nameColumn, ageColumn, departmentColumn);

        // ObservableList to hold data for TableView
        ObservableList<Employee> employees = FXCollections.observableArrayList();

        // JDBC connection and fetch data from the database
        try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password")) {
            String query = "SELECT * FROM employees";
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(query);

            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                String department = resultSet.getString("department");

                // Add employee data to the ObservableList
                employees.add(new Employee(id, name, age, department));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }

        // Set data to the TableView
        tableView.setItems(employees);

        // Create Scene and Stage
        Scene scene = new Scene(tableView, 600, 400);
        primaryStage.setTitle("Database TableView Example");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

ব্যাখ্যা:

  1. Employee Class: একটি Employee ক্লাস তৈরি করা হয়েছে যা ডেটাবেসের ডেটার প্রপার্টি ধারণ করে, যেমন id, name, age, এবং department
  2. TableView এবং TableColumn: TableView এবং তার কলাম তৈরি করা হয়েছে, যেখানে প্রতিটি কলাম একটি নির্দিষ্ট প্রপার্টির জন্য ডেটা শো করবে।
  3. JDBC Connection: Connection এবং Statement ব্যবহার করে ডেটাবেসের ডেটা পড়া হয়েছে।
  4. ObservableList: ObservableList ব্যবহার করা হয়েছে যাতে ডেটা পরিবর্তিত হলে তা TableView-এ অটোমেটিক্যালি আপডেট হয়।
  5. PropertyValueFactory: PropertyValueFactory ক্লাস ব্যবহার করে টেবিল কলামগুলির সাথে ক্লাস প্রপার্টির মান মেলানো হয়েছে।

ডেটাবেস থেকে ডেটা লোড করার বিস্তারিত:

  • ডেটাবেসের সাথে সংযোগ স্থাপন করার জন্য DriverManager.getConnection() ব্যবহার করা হয়েছে, যেখানে ডেটাবেস URL, ইউজার এবং পাসওয়ার্ড দেয়া হয়।
  • SELECT * FROM employees কুয়েরি ব্যবহার করে ডেটাবেস থেকে সমস্ত কর্মচারীর তথ্য সংগ্রহ করা হয়েছে।
  • ResultSet থেকে প্রতিটি কর্মচারীর ডেটা পড়ে Employee অবজেক্ট তৈরি করা হয়েছে এবং সেই অবজেক্টগুলি ObservableList-এ যুক্ত করা হয়েছে।

এটা কীভাবে কাজ করে?:

  • JavaFX TableView ডেটা বিন্যাসের জন্য ObservableList ব্যবহার করে, যেখানে ডেটা পরিবর্তন হলে তা তৎক্ষণাত TableView-এ প্রদর্শিত হয়।
  • ডেটাবেস থেকে ডেটা সংগ্রহ করে, তা JavaFX TableView-এ প্রদর্শন করা হয় এবং ইউজার তা দেখতে পারে।

সারাংশ:

  • JavaFX TableView ব্যবহার করে আপনি ডেটাবেসের ডেটা সহজে ডিসপ্লে করতে পারেন। Data Binding এর মাধ্যমে ObservableList ব্যবহার করে ডেটাবেসের ডেটা TableView এর সাথে সংযুক্ত করা হয়, এবং যে কোন পরিবর্তন TableView-এ রিয়েল-টাইমে আপডেট হয়ে থাকে।
  • JDBC ব্যবহার করে ডেটাবেস থেকে ডেটা লোড করা হয় এবং সেই ডেটা TableView এর মাধ্যমে প্রদর্শিত হয়।
Content added By

Practical উদাহরণ: Simple CRUD Application তৈরি করা

121
121

JavaFX তে একটি Simple CRUD (Create, Read, Update, Delete) Application তৈরি করার উদাহরণ এখানে দেয়া হলো। এই অ্যাপ্লিকেশনটি একটি সাধারণ Student মডেল ব্যবহার করবে এবং একটি GUI তৈরি করবে যেখানে আপনি Create, Read, Update, এবং Delete অপারেশন করতে পারবেন।

আমরা SQLite ডাটাবেস ব্যবহার করব যেখানে Student নামক একটি টেবিল থাকবে এবং JavaFX এর GUI দিয়ে এই টেবিলের উপর CRUD অপারেশন সম্পাদন করা হবে।

Step 1: প্রয়োজনীয় লাইব্রেরি যুক্ত করা

আপনি যদি Maven ব্যবহার করেন, তাহলে আপনার pom.xml ফাইলে নিম্নলিখিত ডিপেনডেন্সি যোগ করুন:

<dependencies>
    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.36.0.3</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>19</version>
    </dependency>
</dependencies>

এটি SQLite ডাটাবেস এবং JavaFX GUI লাইব্রেরি যুক্ত করবে।

Step 2: Student ক্লাস তৈরি করা

প্রথমে, একটি Student ক্লাস তৈরি করি, যাতে আমরা id, name, এবং age ফিল্ডগুলি রাখব:

public class Student {
    private int id;
    private String name;
    private int age;

    // Constructor
    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // Getter and Setter methods
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Step 3: Database হ্যান্ডলিং ক্লাস তৈরি করা

এখন, একটি DatabaseHelper ক্লাস তৈরি করবো যা SQLite ডাটাবেসের সাথে সংযোগ স্থাপন করবে এবং CRUD অপারেশনগুলো পরিচালনা করবে।

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class DatabaseHelper {
    private static final String URL = "jdbc:sqlite:students.db";

    // Create a connection to the database
    public static Connection connect() throws SQLException {
        return DriverManager.getConnection(URL);
    }

    // Create table
    public static void createTable() {
        String createTableSQL = "CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
        try (Connection conn = connect(); Statement stmt = conn.createStatement()) {
            stmt.execute(createTableSQL);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Add a student
    public static void addStudent(Student student) {
        String sql = "INSERT INTO students(name, age) VALUES(?, ?)";
        try (Connection conn = connect(); PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setString(1, student.getName());
            pstmt.setInt(2, student.getAge());
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Get all students
    public static List<Student> getAllStudents() {
        List<Student> students = new ArrayList<>();
        String sql = "SELECT * FROM students";
        try (Connection conn = connect(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) {
            while (rs.next()) {
                students.add(new Student(rs.getInt("id"), rs.getString("name"), rs.getInt("age")));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return students;
    }

    // Update a student
    public static void updateStudent(Student student) {
        String sql = "UPDATE students SET name = ?, age = ? WHERE id = ?";
        try (Connection conn = connect(); PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setString(1, student.getName());
            pstmt.setInt(2, student.getAge());
            pstmt.setInt(3, student.getId());
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Delete a student
    public static void deleteStudent(int id) {
        String sql = "DELETE FROM students WHERE id = ?";
        try (Connection conn = connect(); PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setInt(1, id);
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Step 4: JavaFX GUI তৈরি করা

এখন, JavaFX GUI তৈরি করি যেখানে আমরা CRUD অপারেশনগুলো চালাতে পারব।

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import java.util.List;

public class CRUDApplication extends Application {
    private TextField nameField, ageField;
    private Button addButton, updateButton, deleteButton;
    private ListView<String> studentListView;

    @Override
    public void start(Stage primaryStage) {
        // Initialize UI components
        nameField = new TextField();
        nameField.setPromptText("Enter Name");

        ageField = new TextField();
        ageField.setPromptText("Enter Age");

        addButton = new Button("Add Student");
        updateButton = new Button("Update Student");
        deleteButton = new Button("Delete Student");

        studentListView = new ListView<>();

        // Setup button actions
        addButton.setOnAction(e -> addStudent());
        updateButton.setOnAction(e -> updateStudent());
        deleteButton.setOnAction(e -> deleteStudent());

        // Layout setup
        VBox layout = new VBox(10);
        layout.setPadding(new Insets(20));
        layout.getChildren().addAll(nameField, ageField, addButton, updateButton, deleteButton, studentListView);

        // Create and show scene
        Scene scene = new Scene(layout, 300, 400);
        primaryStage.setTitle("Simple CRUD Application");
        primaryStage.setScene(scene);
        primaryStage.show();

        // Load students on start
        loadStudents();
    }

    private void addStudent() {
        String name = nameField.getText();
        int age = Integer.parseInt(ageField.getText());
        Student student = new Student(0, name, age);
        DatabaseHelper.addStudent(student);
        loadStudents();
    }

    private void updateStudent() {
        String selectedStudent = studentListView.getSelectionModel().getSelectedItem();
        if (selectedStudent != null) {
            String[] parts = selectedStudent.split(" - ");
            int id = Integer.parseInt(parts[0]);
            String name = nameField.getText();
            int age = Integer.parseInt(ageField.getText());

            Student student = new Student(id, name, age);
            DatabaseHelper.updateStudent(student);
            loadStudents();
        }
    }

    private void deleteStudent() {
        String selectedStudent = studentListView.getSelectionModel().getSelectedItem();
        if (selectedStudent != null) {
            String[] parts = selectedStudent.split(" - ");
            int id = Integer.parseInt(parts[0]);
            DatabaseHelper.deleteStudent(id);
            loadStudents();
        }
    }

    private void loadStudents() {
        List<Student> students = DatabaseHelper.getAllStudents();
        studentListView.getItems().clear();
        for (Student student : students) {
            studentListView.getItems().add(student.getId() + " - " + student.getName() + " - " + student.getAge());
        }
    }

    public static void main(String[] args) {
        DatabaseHelper.createTable();  // Ensure the table is created on startup
        launch(args);
    }
}

Step 5: প্রকল্প চালানো

  1. প্রথমে আপনার প্রকল্পে সমস্ত কোড যোগ করুন।
  2. ডাটাবেসের জন্য students.db ফাইলটি তৈরি হবে।
  3. প্রকল্পটি চালিয়ে একটি GUI দেখতে পাবেন যেখানে আপনি Add, Update, এবং Delete অপারেশন করতে পারবেন।

এই উদাহরণটি JavaFX GUI ব্যবহার করে একটি সহজ CRUD অ্যাপ্লিকেশন তৈরি করেছে। এটি SQLite ডাটাবেসের সাথে সংযুক্ত এবং বিভিন্ন CRUD অপারেশন সম্পাদন করে, যা সাধারণ ডাটা ম্যানেজমেন্ট অ্যাপ্লিকেশন তৈরির জন্য একটি ভাল মডেল।

Content added By
Promotion