Spring JDBC-তে SQL Script Integration ব্যবহার করে আপনি ডেটাবেসে SQL স্ক্রিপ্ট রান করতে পারেন। এটি বিশেষত দরকারি হয় যখন আপনাকে ডেটাবেস টেবিল তৈরি, ডেটা ইনসার্ট বা অন্য কনফিগারেশন স্ক্রিপ্ট চালাতে হয়।
Spring Framework-এ SQL স্ক্রিপ্ট চালানোর জন্য ResourceDatabasePopulator
এবং JdbcTemplate
ব্যবহার করা যেতে পারে। এছাড়া, আপনি schema.sql
বা data.sql
ফাইল সরাসরি ব্যবহার করতে পারেন।
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
SQL স্ক্রিপ্ট ফাইল তৈরি করুন যা ডাটাবেস টেবিল তৈরি ও ডেটা ইনসার্ট করতে পারে।
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(50)
);
INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');
INSERT INTO users (name, email) VALUES ('Jane Smith', 'jane@example.com');
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.core.io.ClassPathResource;
import javax.sql.DataSource;
public class SqlScriptIntegrationExample {
public static void main(String[] args) {
// DataSource Configuration
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");
dataSource.setUsername("your_username");
dataSource.setPassword("your_password");
// ResourceDatabasePopulator
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
databasePopulator.addScript(new ClassPathResource("schema.sql"));
databasePopulator.addScript(new ClassPathResource("data.sql"));
// Execute SQL scripts
databasePopulator.execute(dataSource);
System.out.println("SQL scripts executed successfully.");
}
}
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import java.nio.file.Files;
import java.nio.file.Paths;
public class SqlScriptWithJdbcTemplateExample {
public static void main(String[] args) throws Exception {
// DataSource Configuration
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");
dataSource.setUsername("your_username");
dataSource.setPassword("your_password");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
// Read schema.sql and data.sql as strings
String schemaScript = new String(Files.readAllBytes(Paths.get("src/main/resources/schema.sql")));
String dataScript = new String(Files.readAllBytes(Paths.get("src/main/resources/data.sql")));
// Execute scripts
jdbcTemplate.execute(schemaScript);
jdbcTemplate.execute(dataScript);
System.out.println("SQL scripts executed successfully using JdbcTemplate.");
}
}
Spring Boot এ আপনি সরাসরি schema.sql
এবং data.sql
ফাইল ব্যবহার করতে পারেন। Spring Boot স্বয়ংক্রিয়ভাবে এই স্ক্রিপ্টগুলো চালাবে।
src/main/resources/schema.sql
src/main/resources/data.sql
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.initialization-mode=always
Spring Boot স্টার্ট আপ হলে, এটি স্বয়ংক্রিয়ভাবে schema.sql
এবং data.sql
ফাইল এক্সিকিউট করবে।
schema.sql
এবং data.sql
স্বয়ংক্রিয়ভাবে চালানোর সুবিধা দেয়।আপনার প্রজেক্টে SQL স্ক্রিপ্ট ইন্টিগ্রেশন সহজ এবং কার্যকর করার জন্য Spring JDBC-এর এই পদ্ধতিগুলি ব্যবহার করতে পারেন।
Spring JDBC ব্যবহার করে ডাটাবেসে SQL Script চালানো একটি সহজ এবং কার্যকর পদ্ধতি। বিশেষ করে, JdbcTemplate
বা ResourceDatabasePopulator
ব্যবহার করে আপনি SQL স্ক্রিপ্ট এক্সিকিউট করতে পারেন।
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class SQLScriptRunner {
@Autowired
private JdbcTemplate jdbcTemplate;
public void runSQLScript() {
String sql = "CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100));";
jdbcTemplate.execute(sql);
System.out.println("SQL Script executed successfully!");
}
}
jdbcTemplate.execute(sql)
:Spring Framework-এর ResourceDatabasePopulator
ক্লাস ব্যবহার করে বড় SQL স্ক্রিপ্ট ফাইল চালানো যেতে পারে।
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');
INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane.doe@example.com');
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
@Component
public class SQLScriptRunner {
private final DataSource dataSource;
public SQLScriptRunner(DataSource dataSource) {
this.dataSource = dataSource;
}
public void runSQLScript() {
ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
resourceDatabasePopulator.addScript(new ClassPathResource("schema.sql"));
try {
resourceDatabasePopulator.execute(dataSource);
System.out.println("SQL script executed successfully!");
} catch (Exception e) {
e.printStackTrace();
System.err.println("Error executing SQL script.");
}
}
}
ResourceDatabasePopulator
:addScript(new ClassPathResource("schema.sql"))
:execute(dataSource)
:<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.10</version>
</dependency>
Spring Boot প্রকল্পে আপনি সরাসরি data.sql
বা schema.sql
ফাইল ব্যবহার করতে পারেন। Spring Boot অ্যাপ্লিকেশন চালানোর সময় এই ফাইলগুলো অটোমেটিকভাবে চালানো হবে।
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');
INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane.doe@example.com');
Spring Boot schema.sql
এবং data.sql
ফাইল লোড করবে এবং ডাটাবেসে প্রয়োজনীয় স্ক্রিপ্ট চালাবে।
spring.sql.init.mode=always
spring.sql.init.schema-locations=classpath:schema.sql
spring.sql.init.data-locations=classpath:data.sql
Spring JDBC-তে SQL Script চালানোর জন্য বিভিন্ন পদ্ধতি রয়েছে। ছোট স্ক্রিপ্টের জন্য JdbcTemplate
ব্যবহার করতে পারেন, আর বড় এবং একাধিক ফাইল পরিচালনার জন্য ResourceDatabasePopulator
ব্যবহার করা উত্তম। Spring Boot ব্যবহার করলে schema.sql
এবং data.sql
ফাইল স্বয়ংক্রিয়ভাবে চালানোর সুবিধা পাওয়া যায়।
Spring Framework এ ResourceDatabasePopulator একটি সহজ এবং কার্যকর টুল, যা ডেটাবেসে SQL স্ক্রিপ্ট চালানোর জন্য ব্যবহৃত হয়। এটি সাধারণত ডেটাবেস ইনিশিয়ালাইজেশন, টেস্ট ডেটা লোড, বা স্ক্রিপ্ট থেকে টেবিল তৈরির জন্য ব্যবহার করা হয়।
ResourceDatabasePopulator
ক্লাস Spring-এর একটি ইউটিলিটি, যা SQL ফাইল বা স্ক্রিপ্ট চালানোর জন্য ব্যবহৃত হয়। এটি সাধারণত DataSource
এর সাথে কাজ করে এবং ডেটাবেসে নির্দিষ্ট SQL কমান্ড (যেমন টেবিল তৈরি, ডেটা ইনসার্ট) কার্যকর করে।
Spring JDBC এবং ডাটাবেস ড্রাইভার ডিপেন্ডেন্সি নিশ্চিত করুন (যদি Maven ব্যবহার করেন)।
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.22</version>
</dependency>
আপনার SQL স্ক্রিপ্ট একটি .sql
ফাইলে সংরক্ষণ করুন। উদাহরণস্বরূপ, schema.sql
ফাইল:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');
INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane.doe@example.com');
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.core.io.ClassPathResource;
import javax.sql.DataSource;
public class DatabaseInitializer {
private final DataSource dataSource;
public DatabaseInitializer(DataSource dataSource) {
this.dataSource = dataSource;
}
public void initializeDatabase() {
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.addScript(new ClassPathResource("schema.sql")); // SQL স্ক্রিপ্ট যোগ করুন
populator.execute(dataSource); // ডেটাবেসে স্ক্রিপ্ট কার্যকর করুন
}
}
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class MainApp {
public static void main(String[] args) {
// ডেটাসোর্স কনফিগার করুন
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/testdb");
dataSource.setUsername("root");
dataSource.setPassword("password");
// ডেটাবেস ইনিশিয়ালাইজ করুন
DatabaseInitializer initializer = new DatabaseInitializer(dataSource);
initializer.initializeDatabase();
System.out.println("Database initialized with schema and data.");
}
}
addScript()
এক বা একাধিক SQL স্ক্রিপ্ট যোগ করার জন্য ব্যবহৃত হয়।
populator.addScript(new ClassPathResource("schema.sql"));
populator.addScript(new ClassPathResource("data.sql"));
setSeparator()
SQL স্টেটমেন্টগুলোর মধ্যে আলাদা করার জন্য ডিফল্ট ;
সেপারেটর সেট করা।
populator.setSeparator(";");
setContinueOnError()
যদি কোনো SQL স্টেটমেন্ট ব্যর্থ হয়, তাহলে বাকি স্টেটমেন্ট চালানো হবে কিনা সেটি নির্ধারণ করে।
populator.setContinueOnError(true);
setSqlScriptEncoding()
স্ক্রিপ্টের এনকোডিং সেট করার জন্য।
populator.setSqlScriptEncoding("UTF-8");
execute()
ডেটাবেসে স্ক্রিপ্ট কার্যকর করার জন্য।
populator.execute(dataSource);
Spring JDBC-তে ResourceDatabasePopulator ডেটাবেস ইনিশিয়ালাইজেশন বা টেস্ট ডেটা সেটআপের জন্য একটি সহজ এবং কার্যকর টুল। এটি ডেটাবেস অ্যাপ্লিকেশন ডেভেলপমেন্ট এবং টেস্টিং উভয়ের ক্ষেত্রে ডেভেলপারদের সময় বাঁচাতে সাহায্য করে। একাধিক স্ক্রিপ্ট চালানোর সমর্থন এবং ফিচারের কারণে এটি বিশেষভাবে উপযোগী।
Spring Framework ডাটাবেস ইনিশিয়ালাইজেশনের জন্য schema.sql
এবং data.sql
ফাইল সরবরাহ করার সুবিধা প্রদান করে। এই ফাইলগুলো স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশন চালানোর সময় Spring JDBC-এর মাধ্যমে ডাটাবেস ইনিশিয়ালাইজ করতে ব্যবহার করা হয়।
schema.sql
:data.sql
:schema.sql
এবং data.sql
ফাইল তৈরি করাschema.sql
: ডাটাবেস স্কিমা তৈরি করার জন্য SQL কমান্ড লিখুন।-- schema.sql
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
department VARCHAR(50),
salary DECIMAL(10, 2)
);
CREATE TABLE department_stats (
department VARCHAR(50) PRIMARY KEY,
employee_count INT
);
data.sql
: ডাটাবেসে প্রাথমিক ডাটা ইনসার্ট করার জন্য SQL কমান্ড লিখুন।-- data.sql
INSERT INTO employees (name, department, salary) VALUES ('John Doe', 'HR', 50000);
INSERT INTO employees (name, department, salary) VALUES ('Jane Smith', 'IT', 60000);
INSERT INTO department_stats (department, employee_count) VALUES ('HR', 1);
INSERT INTO department_stats (department, employee_count) VALUES ('IT', 1);
resources
ফোল্ডারে সংরক্ষণ করুনSpring Framework resources
ফোল্ডারের মধ্যে থাকা schema.sql
এবং data.sql
ফাইলগুলো স্বয়ংক্রিয়ভাবে খুঁজে পায় এবং সেগুলো কার্যকর করে।
src/main/resources/
├── schema.sql
├── data.sql
Spring Boot-এ, ডাটাবেস ইনিশিয়ালাইজেশন স্বয়ংক্রিয়ভাবে সক্রিয় থাকে। তবে কনফিগারেশন যাচাই করতে নিম্নোক্ত সেটিংস চেক করুন:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
# Enable SQL initialization
spring.sql.init.mode=always
always
: প্রতিবার অ্যাপ্লিকেশন চালানোর সময় ডাটাবেস ইনিশিয়ালাইজ করে।embedded
: শুধুমাত্র এম্বেডেড ডাটাবেসের (যেমন H2, HSQLDB) ক্ষেত্রে ইনিশিয়ালাইজ করে।never
: SQL ইনিশিয়ালাইজেশন বন্ধ রাখে।schema.sql
প্রথমে কার্যকর হয়, এরপর data.sql
।spring.jpa.hibernate.ddl-auto
সেটিং ব্যবহার করেন (যেমন create
বা update
), তখন schema.sql
প্রয়োজন হয় না কারণ Hibernate নিজেই টেবিল তৈরি করতে পারে।pom.xml-এ H2 ডাটাবেস ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
application.properties ফাইল:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.sql.init.mode=always
schema.sql
: টেবিল তৈরি করবে।data.sql
: টেবিলে ডাটা ইনসার্ট করবে।http://localhost:8080/h2-console
) থেকে ডাটাবেস পরীক্ষা করা যাবে।Spring Framework ডিফল্টভাবে schema.sql
এবং data.sql
ফাইলগুলো খুঁজে। আপনি কাস্টম ফাইল নাম ব্যবহার করতে চাইলে, নিচের প্রোপার্টি ব্যবহার করতে পারেন:
spring.sql.init.schema-locations=classpath:/custom-schema.sql
spring.sql.init.data-locations=classpath:/custom-data.sql
Spring JDBC-তে schema.sql
এবং data.sql
ফাইল ব্যবহার করে ডাটাবেস ইনিশিয়ালাইজেশন একটি সহজ এবং কার্যকর পদ্ধতি। এটি ডেভেলপমেন্ট এবং টেস্টিং-এর সময় প্রচুর সময় বাঁচায় এবং অ্যাপ্লিকেশনের ডাটাবেস স্ট্রাকচার ও ডেটার ধারাবাহিকতা নিশ্চিত করে।
Spring JDBC-তে SQL স্ক্রিপ্ট ইন্টিগ্রেশন ডেটাবেস ইনিশিয়ালাইজেশন, টেবিল তৈরি, এবং ডেটা ইনসার্ট করার জন্য অত্যন্ত কার্যকর। এটি সাধারণত ডেটাবেস স্কিমা সেটআপ এবং ডিফল্ট ডেটা লোড করার জন্য ব্যবহৃত হয়। Spring ফ্রেমওয়ার্ক সরাসরি SQL ফাইলগুলো থেকে এই কাজটি করতে পারে।
JdbcTemplate
বা ResourceDatabasePopulator
ব্যবহার করে SQL স্ক্রিপ্ট চালানোএকটি .sql
ফাইল তৈরি করুন এবং এতে আপনার প্রয়োজনীয় SQL স্টেটমেন্ট যুক্ত করুন।
schema.sql:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
CREATE TABLE departments (
id INT PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO departments (id, name) VALUES (1, 'IT');
INSERT INTO departments (id, name) VALUES (2, 'HR');
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import javax.sql.DataSource;
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean
public void initializeDatabase(DataSource dataSource) {
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
databasePopulator.addScript(new ClassPathResource("schema.sql"));
databasePopulator.execute(dataSource);
}
}
JdbcTemplate
ব্যবহার করে সরাসরি SQL স্ক্রিপ্ট থেকে কোয়েরি চালানো যায়।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class SQLScriptService {
@Autowired
private JdbcTemplate jdbcTemplate;
public void runScript() {
String sql = "CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));";
jdbcTemplate.execute(sql);
}
}
Spring Boot সরাসরি schema.sql
এবং data.sql
ফাইলগুলো থেকে ডাটাবেস ইনিশিয়ালাইজ করতে পারে।
src/main/resources
ফোল্ডারে schema.sql
এবং data.sql
ফাইল তৈরি করুন।schema.sql:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
data.sql:
INSERT INTO employees (id, name, department) VALUES (1, 'John Doe', 'IT');
INSERT INTO employees (id, name, department) VALUES (2, 'Jane Smith', 'HR');
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.initialization-mode=always
আপনার ডেটাবেসে ডেটা সঠিকভাবে লোড হয়েছে কি না তা যাচাই করতে একটি সিম্পল কোড লিখতে পারেন।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class EmployeeService {
@Autowired
private JdbcTemplate jdbcTemplate;
public void fetchEmployees() {
String query = "SELECT * FROM employees";
jdbcTemplate.query(query, (rs, rowNum) -> {
System.out.println("ID: " + rs.getInt("id"));
System.out.println("Name: " + rs.getString("name"));
System.out.println("Department: " + rs.getString("department"));
return null;
});
}
}
schema.sql
এবং data.sql
-এর মাধ্যমে অটোমেটেড ইনিশিয়ালাইজেশন।Spring JDBC দিয়ে SQL স্ক্রিপ্ট ইন্টিগ্রেশন ডেটাবেস ইন্টিগ্রেশন এবং ইনিশিয়ালাইজেশনের জন্য একটি কার্যকর পদ্ধতি। Spring Boot এর ক্ষেত্রে এটি আরও সহজ, কারণ Spring নিজে থেকেই স্ক্রিপ্টগুলো হ্যান্ডেল করে।
Read more