JavaFX এবং Database Integration এর মাধ্যমে আপনি JavaFX অ্যাপ্লিকেশনের সাথে ডেটাবেস সংযোগ তৈরি করতে পারেন, যাতে আপনার অ্যাপ্লিকেশন ডেটা সংরক্ষণ, পুনরুদ্ধার এবং আপডেট করতে সক্ষম হয়। JavaFX এবং ডেটাবেসের মধ্যে সংযোগ স্থাপন করার জন্য সাধারণত JDBC (Java Database Connectivity) ব্যবহার করা হয়।
প্রথমে, আপনাকে ডেটাবেস ড্রাইভারকে JavaFX অ্যাপ্লিকেশন-এ যুক্ত করতে হবে। উদাহরণস্বরূপ, MySQL JDBC ড্রাইভার।
pom.xml ফাইলে MySQL JDBC ড্রাইভার যুক্ত করুন:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version> <!-- Version may vary -->
</dependency>
এখানে একটি সাধারণ উদাহরণ দেওয়া হয়েছে যেখানে JavaFX অ্যাপ্লিকেশন MySQL ডেটাবেসের সাথে সংযুক্ত হচ্ছে এবং ডেটা প্রদর্শন করছে।
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);
}
}
DriverManager.getConnection()
ব্যবহার করে MySQL ডেটাবেসে সংযোগ স্থাপন করা হয়েছে।ResultSet
এবং Statement
ব্যবহার করে ডেটাবেস থেকে ডেটা আহরণ করা হচ্ছে।Alert
তৈরি করা হয়, যা ইউজারকে জানায়।String insertQuery = "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')";
statement.executeUpdate(insertQuery);
String updateQuery = "UPDATE your_table SET column1 = 'newValue' WHERE column2 = 'value2'";
statement.executeUpdate(updateQuery);
String deleteQuery = "DELETE FROM your_table WHERE column1 = 'value1'";
statement.executeUpdate(deleteQuery);
ডেটাবেসের সাথে কাজ করার সময় যদি কোনও সমস্যা হয় (যেমন সংযোগ ব্যর্থতা, সঠিক SQL প্রশ্ন না হওয়া ইত্যাদি), তাহলে SQLException হ্যান্ডেল করতে হবে।
try {
// ডেটাবেস অপারেশন
} catch (SQLException e) {
// Exception handling
e.printStackTrace();
}
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 ব্যবহার করে আপনি ডেটাবেসের ডেটা টেবিল আকারে প্রদর্শন করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো:
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 এবং JDBC (Java Database Connectivity) ব্যবহার করে আপনি JavaFX অ্যাপ্লিকেশন থেকে ডাটাবেসের সাথে সংযোগ স্থাপন এবং ডাটা অ্যাক্সেস করতে পারেন। JDBC একটি API যা Java অ্যাপ্লিকেশনগুলোকে রিলেশনাল ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করতে সহায়তা করে। JavaFX দিয়ে ইউজার ইন্টারফেস তৈরি করার পাশাপাশি, JDBC ব্যবহার করে ডাটাবেসের সাথে কাজ করা সম্ভব।
JDBC এর মাধ্যমে ডাটাবেস সংযোগ করার জন্য সাধারণত কয়েকটি ধাপ অনুসরণ করতে হয়:
DriverManager.getConnection()
ব্যবহার করে ডাটাবেসের সাথে সংযোগ স্থাপন করা হয়।ResultSet
এর মাধ্যমে ডাটাবেস থেকে ডাটা সংগ্রহ করা হয়।এই উদাহরণে আমরা একটি MySQL ডাটাবেসের সাথে সংযোগ স্থাপন এবং তিনটি কলাম সহ একটি সিম্পল টেবিল থেকে ডাটা প্রদর্শন করব।
প্রথমে, আপনার 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>
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;
}
}
DriverManager.getConnection()
ব্যবহার করে MySQL ডাটাবেসের সাথে সংযোগ স্থাপন করা হয়েছে।SELECT
কুয়েরি ব্যবহার করে people
টেবিল থেকে ডাটা রিট্রিভ করা হচ্ছে।TableView
ব্যবহার করে ডাটাবেস থেকে পাওয়া ডাটা ইউজারের জন্য প্রদর্শন করা হচ্ছে।Person
ক্লাস একটি POJO (Plain Old Java Object) যা TableView
এর জন্য ডাটা ধারণ করে।ধরা যাক, আপনি যে ডাটাবেস থেকে ডাটা রিট্রিভ করছেন তার নাম 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');
SELECT
কুয়েরি চালিয়ে ডাটা রিট্রিভ করা হয়েছে।JavaFX দিয়ে ডাটাবেস থেকে ডেটা ফেচ করা এবং UI তে প্রদর্শন করা একটি সাধারণ কাজ, যা অনেক অ্যাপ্লিকেশনে প্রয়োজন হয়। আমরা JDBC (Java Database Connectivity) ব্যবহার করে ডেটাবেসের সাথে সংযোগ স্থাপন করি এবং তারপর JavaFX UI উপাদান (যেমন TableView
, ListView
, বা TextField
) এ ডেটা প্রদর্শন করি।
TableView
, ListView
, ইত্যাদি ব্যবহার করে)আমরা একটি সাধারণ MySQL ডাটাবেস থেকে ডেটা ফেচ করে একটি TableView
তে প্রদর্শন করার উদাহরণ দেখব।
প্রথমে, আপনি আপনার প্রজেক্টে 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>
এখানে একটি 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);
এখন আমরা একটি 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;
}
}
}
Student
ক্লাস:name
এবং age
ফিল্ড ধারণ করে। SimpleStringProperty
এবং SimpleIntegerProperty
ব্যবহার করে, JavaFX এর প্রপার্টি মেকানিজম সক্রিয় করা হয়েছে, যা UI এ ডেটার পরিবর্তন স্বয়ংক্রিয়ভাবে রিফ্রেশ করতে সাহায্য করবে।loadDataFromDatabase()
মেথড:JDBC
ব্যবহার করে MySQL ডাটাবেসে সংযোগ করা হয়েছে এবং SELECT * FROM students
কুয়েরি ব্যবহার করে ডেটা ফেচ করা হচ্ছে।ObservableList
এ যোগ করা হচ্ছে, যা পরবর্তীতে TableView
তে প্রদর্শিত হবে।TableView
তৈরি করা হয়েছে যাতে name
এবং age
কলাম থাকবে। ObservableList
ডেটা থেকে কলামগুলো পূর্ণ হবে।TableColumn
:TableColumn
তৈরি করা হয়েছে এবং প্রত্যেকটি কলামে cellValueFactory
ব্যবহার করে ডেটার জন্য প্রপার্টি দেওয়া হয়েছে।ObservableList
: এটি একটি List
যা JavaFX UI কন্ট্রোলের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম। আপনি যখন এই লিস্টে ডেটা যোগ করেন, তখন UI তে তা স্বয়ংক্রিয়ভাবে আপডেট হয়ে যায়।TableView
, TextField
, ComboBox
ইত্যাদি কন্ট্রোল ব্যবহার করতে পারেন।JavaFX TableView এর মাধ্যমে Database এর ডেটা data binding করার মাধ্যমে আপনি আপনার JavaFX অ্যাপ্লিকেশনে ডেটাবেসের ডেটা খুব সহজভাবে প্রদর্শন করতে পারেন। TableView
একটি শক্তিশালী কন্ট্রোল যা সারণী আকারে ডেটা প্রদর্শন করার জন্য ব্যবহৃত হয় এবং data binding এর মাধ্যমে আপনি ডেটাবেসের ডেটা সরাসরি TableView
-এ প্রদর্শন করতে পারেন।
এখানে, আমরা JDBC (Java Database Connectivity) ব্যবহার করে ডেটাবেস থেকে ডেটা নিয়ে, সেই ডেটাকে TableView
এ প্রদর্শন করব।
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
ব্যবহার করে ডেটাবেসের ডেটা প্রদর্শন করব।
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);
}
}
Employee
ক্লাস তৈরি করা হয়েছে যা ডেটাবেসের ডেটার প্রপার্টি ধারণ করে, যেমন id
, name
, age
, এবং department
।TableView
এবং তার কলাম তৈরি করা হয়েছে, যেখানে প্রতিটি কলাম একটি নির্দিষ্ট প্রপার্টির জন্য ডেটা শো করবে।Connection
এবং Statement
ব্যবহার করে ডেটাবেসের ডেটা পড়া হয়েছে।ObservableList
ব্যবহার করা হয়েছে যাতে ডেটা পরিবর্তিত হলে তা TableView
-এ অটোমেটিক্যালি আপডেট হয়।PropertyValueFactory
ক্লাস ব্যবহার করে টেবিল কলামগুলির সাথে ক্লাস প্রপার্টির মান মেলানো হয়েছে।DriverManager.getConnection()
ব্যবহার করা হয়েছে, যেখানে ডেটাবেস URL, ইউজার এবং পাসওয়ার্ড দেয়া হয়।SELECT * FROM employees
কুয়েরি ব্যবহার করে ডেটাবেস থেকে সমস্ত কর্মচারীর তথ্য সংগ্রহ করা হয়েছে।ResultSet
থেকে প্রতিটি কর্মচারীর ডেটা পড়ে Employee
অবজেক্ট তৈরি করা হয়েছে এবং সেই অবজেক্টগুলি ObservableList
-এ যুক্ত করা হয়েছে।TableView
ডেটা বিন্যাসের জন্য ObservableList
ব্যবহার করে, যেখানে ডেটা পরিবর্তন হলে তা তৎক্ষণাত TableView
-এ প্রদর্শিত হয়।TableView
-এ প্রদর্শন করা হয় এবং ইউজার তা দেখতে পারে।ObservableList
ব্যবহার করে ডেটাবেসের ডেটা TableView
এর সাথে সংযুক্ত করা হয়, এবং যে কোন পরিবর্তন TableView
-এ রিয়েল-টাইমে আপডেট হয়ে থাকে।TableView
এর মাধ্যমে প্রদর্শিত হয়।JavaFX তে একটি Simple CRUD (Create, Read, Update, Delete) Application তৈরি করার উদাহরণ এখানে দেয়া হলো। এই অ্যাপ্লিকেশনটি একটি সাধারণ Student মডেল ব্যবহার করবে এবং একটি GUI তৈরি করবে যেখানে আপনি Create, Read, Update, এবং Delete অপারেশন করতে পারবেন।
আমরা SQLite ডাটাবেস ব্যবহার করব যেখানে Student
নামক একটি টেবিল থাকবে এবং JavaFX এর GUI দিয়ে এই টেবিলের উপর CRUD অপারেশন সম্পাদন করা হবে।
আপনি যদি 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 লাইব্রেরি যুক্ত করবে।
প্রথমে, একটি 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;
}
}
এখন, একটি 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();
}
}
}
এখন, 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);
}
}
students.db
ফাইলটি তৈরি হবে।এই উদাহরণটি JavaFX GUI ব্যবহার করে একটি সহজ CRUD অ্যাপ্লিকেশন তৈরি করেছে। এটি SQLite ডাটাবেসের সাথে সংযুক্ত এবং বিভিন্ন CRUD অপারেশন সম্পাদন করে, যা সাধারণ ডাটা ম্যানেজমেন্ট অ্যাপ্লিকেশন তৈরির জন্য একটি ভাল মডেল।
Read more