পার্ল (Perl) একটি শক্তিশালী স্ক্রিপ্টিং ভাষা যা টেক্সট প্রক্রিয়াকরণ, সিস্টেম অ্যাডমিনিস্ট্রেশন, এবং ওয়েব ডেভেলপমেন্টে ব্যাপকভাবে ব্যবহৃত হয়। SQLite-এর সাথে পার্লের যোগাযোগ ঘটে DBI (ডাটাবেস ইন্টারফেস) এবং DBD::SQLite (ডাটাবেস ড্রাইভার) মডিউলের মাধ্যমে। DBI একটি স্ট্যান্ডার্ড ডাটাবেস অ্যাক্সেস API সরবরাহ করে, যা বিভিন্ন ডাটাবেসের জন্য একই রকম কোড লিখতে সাহায্য করে। এই পর্বে আমরা পার্লে DBI ইনস্টল করা, ডাটাবেস সংযোগ তৈরি, টেবিল তৈরি, ও CRUD (Create, Read, Update, Delete) অপারেশন উদাহরণসহ সম্পূর্ণ শিখব।
পূর্বপ্রস্তুতি
- পার্ল ইন্টারপ্রেটার (সাধারণত লিনাক্স/ম্যাকে আগে থেকেই থাকে; উইন্ডোজে Strawberry Perl ইন্সটল করতে পারেন)।
- DBI ও DBD::SQLite মডিউল ইন্সটল করতে হবে।
- টার্মিনাল বা কমান্ড প্রম্পট ব্যবহার করতে পারবেন।
১. DBI ও DBD::SQLite ইনস্টলেশন
পার্লে মডিউল ইন্সটলের জন্য cpan (Comprehensive Perl Archive Network) ব্যবহার করা হয়। অথবা ম্যানুয়ালি ডাউনলোড করে কম্পাইল করতে পারেন।
সহজ পদ্ধতি (cpan ব্যবহার করে):
bash
sudo cpan DBI sudo cpan DBD::SQLite
ম্যানুয়াল ইনস্টলেশন (উদাহরণ):
bash
wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.643.tar.gz tar xvfz DBI-1.643.tar.gz cd DBI-1.643 perl Makefile.PL make make install wget http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/DBD-SQLite-1.72.tar.gz tar xvfz DBD-SQLite-1.72.tar.gz cd DBD-SQLite-1.72 perl Makefile.PL make make install
ইন্সটল শেষে পার্ল শেলে perl -MDBI -e 'print "DBI installed\n"' এবং perl -MDBD::SQLite -e 'print "DBD::SQLite installed\n"' দিয়ে পরীক্ষা করতে পারেন।
২. প্রধান DBI API সমূহ
পার্লে SQLite অপারেশনের জন্য নিচের ফাংশনগুলো সবচেয়ে বেশি ব্যবহৃত হয়:
| API | বর্ণনা |
|---|---|
DBI->connect($dsn, $user, $pass, \%attr) | ডাটাবেস সংযোগ স্থাপন করে, ডাটাবেস হ্যান্ডেল ($dbh) রিটার্ন করে। $dsn ফরম্যাট: "DBI:SQLite:dbname=test.db" |
$dbh->do($sql) | একটি SQL স্টেটমেন্ট তৈরি ও এক্সিকিউট করে। রিটার্ন করে প্রভাবিত সারির সংখ্যা (অথবা -1 যদি অজানা) অথবা ত্রুটিতে undef। |
$dbh->prepare($sql) | পরবর্তীতে এক্সিকিউট করার জন্য স্টেটমেন্ট প্রস্তুত করে। রিটার্ন করে স্টেটমেন্ট হ্যান্ডেল ($sth)। |
$sth->execute() | প্রস্তুতকৃত স্টেটমেন্ট এক্সিকিউট করে। সফল হলে true (সারি সংখ্যা নয়), ত্রুটিতে undef। |
$sth->fetchrow_array() | পরবর্তী সারির ডেটা অ্যারে (list) হিসেবে ফেরত দেয়। NULL ফিল্ড undef হয়। |
$DBI::err | সর্বশেষ ড্রাইভার মেথড কলের নেটিভ ডাটাবেস ইঞ্জিন এরর কোড। |
$DBI::errstr | সর্বশেষ DBI মেথড কলের ত্রুটির বর্ণনা (স্ট্রিং)। |
$dbh->disconnect() | ডাটাবেস সংযোগ বন্ধ করে। |
৩. ডাটাবেসে সংযোগ
নিচের কোড test.db নামে একটি SQLite ডাটাবেস খোলে (যদি না থাকে তবে তৈরি করে) এবং সফল হলে মেসেজ দেখায়।
perl
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
$dbh->disconnect();
RaiseError => 1 অ্যাট্রিবিউট দিলে কোনো ত্রুটি ঘটলে স্বয়ংক্রিয়ভাবে die হবে, অন্যথায় ম্যানুয়ালি এরর চেক করতে হবে। :memory: দিলে ইন-মেমোরি ডাটাবেস তৈরি হবে।
৪. টেবিল তৈরি
do() মেথড ব্যবহার করে DDL স্টেটমেন্ট (CREATE, DROP) চালানো হয়।
perl
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL););
my $rv = $dbh->do($stmt);
if($rv < 0) {
print $DBI::errstr;
} else {
print "Table created successfully\n";
}
$dbh->disconnect();
qq() হলো কোট-লাইক অপারেটর, যা ডাবল কোটের মতো কাজ করে এবং মাল্টি-লাইন স্ট্রিং সহজ করে।
৫. INSERT অপারেশন
প্রতিটি INSERT আলাদাভাবে do() দিতে পারেন, অথবা prepare + execute ব্যবহার করতে পারেন (প্যারামিটারাইজডের জন্য ভালো)।
perl
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 ));
my $rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Allen', 25, 'Texas', 15000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ););
$rv = $dbh->do($stmt) or die $DBI::errstr;
print "Records created successfully\n";
$dbh->disconnect();
৬. SELECT অপারেশন
prepare() ও execute() দিয়ে ডেটা আনা যায়, তারপর fetchrow_array() দিয়ে সারি রিড করা হয়।
perl
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $dbh = DBI->connect($dsn, "", "", { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(SELECT id, name, address, salary from COMPANY;);
my $sth = $dbh->prepare( $stmt );
my $rv = $sth->execute() or die $DBI::errstr;
while(my @row = $sth->fetchrow_array()) {
print "ID = ". $row[0] . "\n";
print "NAME = ". $row[1] ."\n";
print "ADDRESS = ". $row[2] ."\n";
print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();
আউটপুটে ৪টি রেকর্ড প্রিন্ট হবে।
৭. UPDATE ও DELETE অপারেশন
এগুলোও do() দিয়ে সহজে করা যায়, এবং do() প্রভাবিত সারির সংখ্যা রিটার্ন করে।
UPDATE:
perl
my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;); my $rv = $dbh->do($stmt) or die $DBI::errstr; print "Total number of rows updated : $rv\n";
DELETE:
perl
my $stmt = qq(DELETE from COMPANY where ID = 2;); my $rv = $dbh->do($stmt) or die $DBI::errstr; print "Total number of rows deleted : $rv\n";
পরিবর্তনের পর আবার SELECT দিয়ে যাচাই করে নেওয়া ভালো।
৮. ডিরেক্টরি স্ট্রাকচার
পার্ল স্ক্রিপ্ট ও ডাটাবেস ফাইল একই ফোল্ডারে রাখতে পারেন:
text
perl-sqlite-demo/ ├── connect.pl ├── create_table.pl ├── insert.pl ├── select.pl ├── update.pl ├── delete.pl └── test.db
প্রতিটি .pl ফাইল এক্সিকিউটেবল করতে chmod +x filename.pl দিন অথবা সরাসরি perl filename.pl দিয়ে চালান।
প্রয়োজনীয় প্যাকেজ:
- DBI (ডাটাবেস ইন্টারফেস)
- DBD::SQLite (SQLite ড্রাইভার)
কোনো আলাদা SQLite ইন্সটল করার দরকার নেই, কারণ DBD::SQLite নিজেই SQLite লাইব্রেরি বহন করে।
৯. গুরুত্বপূর্ণ টিপস ও সমস্যা সমাধান
- ত্রুটির বার্তা:
DBD::SQLite::st execute failed: not an error(21) at dbdimp.c line 398– এই ত্রুটির ক্ষেত্রে পুরনো DBD::SQLite সংস্করণেরdbdimp.cফাইলেরsqlite3_prepare()ফাংশনের তৃতীয় আর্গুমেন্ট-1করে পুনরায় কম্পাইল করতে হতে পারে। তবে আধুনিক সংস্করণে এটি ঠিক করা আছে।cpanদিয়ে আপডেটেড DBD::SQLite ইন্সটল করুন। - প্যারামিটার বাইন্ডিং: নিরাপত্তার জন্য
prepareওexecute-তে প্লেসহোল্ডার (?) ব্যবহার করুন:perlmy $sth = $dbh->prepare(“INSERT INTO COMPANY VALUES (?, ?, ?, ?, ?)”); $sth->execute(5, ‘Karim’, 30, ‘Dhaka’, 50000); doবনামprepare/execute:do()এককালীন এক্সিকিউশনের জন্য ভালো, বিশেষ করে SELECT বিহীন কমান্ডে। পুনরাবৃত্তিমূলক বা প্যারামিটারাইজড কোয়েরির জন্যprepare/executeব্যবহার করুন।RaiseError: সংযোগের সময়RaiseError => 1দিলে প্রতিটি ত্রুটিতে স্বয়ংক্রিয়ভাবেdieহবে, ম্যানুয়ালিor dieলাগবে না (তবে উভয়ই ব্যবহার করা নিরাপদ)।- ফেচিং:
fetchrow_array()ছাড়াওfetchrow_hashref()ব্যবহার করে কলাম নাম ধরে ডেটা পাওয়া যায়:$row->{ID}।
১০. সম্পূর্ণ CRUD স্ক্রিপ্ট একত্রে
perl
#!/usr/bin/perl
use DBI;
use strict;
my $dbh = DBI->connect("DBI:SQLite:dbname=test.db", "", "", { RaiseError => 1, AutoCommit => 1 });
# Create
$dbh->do("CREATE TABLE IF NOT EXISTS COMPANY (ID INT PRIMARY KEY, NAME TEXT, AGE INT, ADDRESS TEXT, SALARY REAL)");
# Insert
$dbh->do("INSERT INTO COMPANY VALUES (1, 'Paul', 32, 'California', 20000)");
$dbh->do("INSERT INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000)");
# Select
my $sth = $dbh->prepare("SELECT * FROM COMPANY");
$sth->execute();
while(my @row = $sth->fetchrow_array()) {
print "ID=$row[0], NAME=$row[1]\n";
}
# Update
$dbh->do("UPDATE COMPANY SET SALARY = 30000 WHERE ID = 1");
# Delete
$dbh->do("DELETE FROM COMPANY WHERE ID = 2");
$dbh->disconnect();
পরবর্তী পর্বে
আমরা SQLite-তে পাইথন প্রোগ্রামিং – Python-এ sqlite3 মডিউল ব্যবহার করে ডাটাবেস অপারেশন শিখব।
লেখকের কথা: পার্ল ও SQLite-এর এই যুগলবন্দি ছোট থেকে মাঝারি অ্যাপ্লিকেশনের জন্য চমৎকার। বাংলায় SQLite সিরিজ সম্প্রসারিত হচ্ছে আপনাদের উৎসাহেই। পোস্টটি ভালো লাগলে শেয়ার করুন, এবং সব আপডেট পেতে ToLearnTeam.com সাবস্ক্রাইব করুন। আপনার প্রশ্ন ও মতামত কমেন্টে জানান – আমরা উত্তর দিতে প্রস্তুত!
SQLite Full Course
- SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
- SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
- SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
- SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
- SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
- SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
- SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
- SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
- SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
- SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
- SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
- SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
- SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
- SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
- SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
- SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
- SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
- SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
- SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
- SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
- SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
- SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
- SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
- SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
- SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
- SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
- SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
- SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
- SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
- SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
- SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
- SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
- SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
- SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
- SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
- SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
- SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
- SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
- SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
