কম্পিউটার টিউটোরিয়াল

JSqlParser ব্যবহার করে CREATE TABLE স্টেটমেন্টে প্রাইমারি কী যোগ করা

পার্সার হলো একটি প্রোগ্রাম যা শব্দ/বাক্যের ব্যাকরণ বুঝতে পারে এবং সিনট্যাকটিক্যাল ট্রি রিপ্রেজেন্টেশন উৎপন্ন করে। এটি প্রোগ্রামিং ল্যাঙ্গুয়েজ, ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং, SQL এবং অন্যান্য অনেক ক্ষেত্রে ব্যবহৃত হয়। পার্সার ব্যবহারের প্রদর্শনের জন্য, এই টিউটোরিয়ালে আমরা ওপেন সোর্স JSqlParser-কে রেফার করব।

JSqlParser

JSqlParser হলো একটি SQL স্টেটমেন্ট পার্সার যা GitHub-এ ওপেন সোর্স হিসেবে উপলব্ধ। এটি একটি SQL স্টেটমেন্ট পার্স করে এবং জাভা ক্লাসের একটি হায়ারার্কিতে অনুবাদ করে। নিচের উদাহরণে, আমরা JSqlParser ব্যবহার করে CREATE TABLE স্টেটমেন্ট পার্স করব। আসুন একটি জাভা প্রোগ্রাম লিখি CREATE TABLE স্টেটমেন্ট পার্স করতে এবং সেটিতে প্রাইমারি কী যোগ করতে।

CREATE TABLE স্টেটমেন্ট

CREATE TABLE College_db.Students (
    Student_id int,
    Name varchar(255),
    Course varchar(255),
    Join_date DATE
);

উপরোক্ত CREATE TABLE স্টেটমেন্টে, আমরা Student_id কলামকে প্রাইমারি কী হিসেবে যোগ করতে চাই।

JSqlParser ব্যবহার করে CREATE TABLE SQL পার্স করার জাভা প্রোগ্রাম

ধাপ ১: JSqlParser ডিপেন্ডেন্সি হিসেবে যোগ করা

আমরা একটি মেভেন প্রজেক্ট তৈরি করছি JSqlParser ডিপেন্ডেন্সি হিসেবে যোগ করতে। নিচের ডিপেন্ডেন্সিটি pom.xml ফাইলে যোগ করুন।

<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>4.2</version>
</dependency>

ধাপ ২: ইনপুট CREATE TABLE স্টেটমেন্ট একটি ভেরিয়েবলে অ্যাসাইন করা

এটি আমাদের ইনপুট CREATE TABLE স্টেটমেন্ট যেটিতে প্রাইমারি কী নেই। নিউ লাইন ক্যারেক্টার \n অপশনাল। আমরা সম্পূর্ণ SQL একক লাইনে দিতে পারি। পঠনযোগ্যতার জন্য, আমরা মাল্টি লাইনে ইনপুট দিচ্ছি।

String createTableSql = "CREATE TABLE College_db.Students (\n" +
    " Student_id int,\n" +
    " Name varchar(255),\n" +
    " Course varchar(255),\n" +
    " Join_date DATE\n" +
    ");";

ধাপ ৩: JSqlParser ব্যবহার করে SQL পার্স করা

Parser util class CCJSqlParserUtil ব্যবহার করে, আমরা CREATE TABLE SQL-কে আর্গুমেন্ট হিসেবে parse মেথড কল করছি।

Statement createTable = CCJSqlParserUtil.parse(createTableSql);

parse মেথড এক্সিকিউট হওয়ার পর, Statement অবজেক্ট createTable-এ নিচের হায়ারার্কি হিসেবে জাভা ক্লাসগুলো থাকে।

JSqlParser ব্যবহার করে CREATE TABLE স্টেটমেন্টে প্রাইমারি কী যোগ করাJSqlParser আউটপুট জাভা ক্লাসের হায়ারার্কি হিসেবে

ধাপ ৪: পার্সার আউটপুট এক্সপ্লোর করা

যদি parse মেথড সফলভাবে এক্সিকিউট হয়, তবে আমরা CREATE TABLE স্টেটমেন্ট সম্পর্কে সব ইনফরমেশন পেতে পারি। চলুন ডেটাবেস/টেবিল নাম এবং কলাম ডেফিনিশন পাই। এছাড়াও আমরা CREATE TABLE স্টেটমেন্টে ডেটাবেস এবং টেবিল নাম পরিবর্তন করছি।

System.out.println("Table Name from query: " + ((CreateTable) createTable).getTable().getName());
System.out.println("Database Name from query: " + ((CreateTable) createTable).getTable().getSchemaName());
System.out.println("\nColumns in the given insert query");
System.out.println("---------------------------------\n");
for(ColumnDefinition col: ((CreateTable) createTable).getColumnDefinitions()) {
    System.out.println(col.getColumnName() + " - " + col.getColDataType().toString());
}
// DB এবং টেবিল নাম পরিবর্তন
((CreateTable) createTable).getTable().setSchemaName("College_db_bk");
((CreateTable) createTable).getTable().setName("Students_bkup");

ধাপ ৫: প্রাইমারি কী কনস্ট্রেইন্ট إندেক্স হিসেবে তৈরি করা

আমরা SQL-এ ভিন্ন إندেক্স সেট করতে পারি যেমন Check constraint, Exclude constraint, Foreign key এবং Named constraint। প্রাইমারি কী-এর জন্য, আমাদের একটি Named constraint তৈরি করতে হবে নিচের মতো।

// Creating Primary Key constraint
NamedConstraint namedConstraint = new NamedConstraint();
namedConstraint.setType("PRIMARY KEY");
// প্রাইমারি কী-এর জন্য কলাম নাম যোগ করা
List<Index.ColumnParams> columns = new ArrayList<>();
Index.ColumnParams columnParams = new Index.ColumnParams("Student_id");
columns.add(columnParams);
// প্রাইমারি কী কনস্ট্রেইন্টে কলাম সেট করা
namedConstraint.setColumns(columns);

চলুন Student_id-এর প্রাইমারি কীকে Named constraint হিসেবে ইনডেক্সে সেট করি।

// Setting the Primary Key constraint in Index list
List<Index> indexList = new ArrayList<>();
indexList.add(namedConstraint);

ধাপ ৬: CREATE TABLE স্টেটমেন্টে ইনডেক্স সেট করা

আমাদের ইনডেক্স লিস্টটি CREATE TABLE-এ নিচের মতো সেট করতে হবে যাতে CREATE TABLE স্টেটমেন্ট প্রাইমারি কী সহ জেনারেট হয়।

((CreateTable) createTable).setIndexes(indexList);

CREATE TABLE SQL-এ প্রাইমারি কী যোগ করার সম্পূর্ণ জাভা প্রোগ্রাম

import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.create.table.ColumnDefinition;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.table.Index;
import net.sf.jsqlparser.statement.create.table.NamedConstraint;
import java.util.ArrayList;
import java.util.List;

public class AddPrimaryKey {
    public static void main(String[] args) {
        System.out.println("Adding Primary key in the CREATE TABLE statement");
        System.out.println("-------------------------------------\n");
        // Assign the input CREATE TABLE sql
        String createTableSql = "CREATE TABLE College_db.Students (\n" +
            " Student_id int,\n" +
            " Name varchar(255),\n" +
            " Course varchar(255),\n" +
            " Join_date DATE\n" +
            ");";
        try {
            // Parsing Create table statement using JSqlParser
            Statement createTable = CCJSqlParserUtil.parse(createTableSql);
            // Getting the table and database name from Create table
            System.out.println("Table Name from query: " + ((CreateTable) createTable).getTable().getName());
            System.out.println("Database Name from query: " + ((CreateTable) createTable).getTable().getSchemaName());
            System.out.println("\nColumns in the given insert query");
            System.out.println("---------------------------------\n");
            for (ColumnDefinition col : ((CreateTable) createTable).getColumnDefinitions()) {
                System.out.println(col.getColumnName() + " - " + col.getColDataType().toString());
            }
            // Changing the DB and table name
            ((CreateTable) createTable).getTable().setSchemaName("College_db_bk");
            ((CreateTable) createTable).getTable().setName("Students_bkup");
            // Creating Primary Key constraint
            NamedConstraint namedConstraint = new NamedConstraint();
            namedConstraint.setType("PRIMARY KEY");
            // Adding column names for the Primary Key
            List<Index.ColumnParams> columns = new ArrayList<>();
            Index.ColumnParams columnParams = new Index.ColumnParams("Student_id");
            columns.add(columnParams);
            // Setting columns in the Primary Key constraint
            namedConstraint.setColumns(columns);
            // Setting the Primary Key constraint in Index list
            List<Index> indexList = new ArrayList<>();
            indexList.add(namedConstraint);
            // Setting the indexes in Create table statement
            ((CreateTable) createTable).setIndexes(indexList);
            System.out.println("New CREATE TABLE statement with Primary Key");
            System.out.println("---------------------------------");
            System.out.println(createTable + ";");
        } catch (JSQLParserException e) {
            throw new RuntimeException(e);
        }
    }
}

আউটপুট

নিচে দেখানো হয়েছে, Student_id-এর প্রাইমারি কী সহ নতুন CREATE TABLE জেনারেট হয়েছে। এছাড়াও ডেটাবেস এবং টেবিল নাম পরিবর্তন হয়ে College_db_bk.Students_bkup হয়েছে।

Adding Primary key in the CREATE TABLE statement
-------------------------------------
Table Name from query: Students
Database Name from query: College_db
Columns in the given insert query
---------------------------------
Student_id - int
Name - varchar (255)
Course - varchar (255)
Join_date - DATE
New CREATE TABLE statement with Primary Key
---------------------------------
CREATE TABLE College_db_bk.Students_bkup (Student_id int, Name varchar (255), Course varchar (255), Join_date DATE, PRIMARY KEY (Student_id));

সুপারিশ করা আর্টিকেলস

  • Apache Hive parser example
ত্রিভুজ No
  1. CSS দিয়ে অ্যারো (Arrow) তৈরি

  2. ডেটা স্ট্রাকচরে BSP ট্রি

  3. Java-এ JDBC ResultSetMetaData ব্যবহার করে MySQL টেবিলের কলাম সংখ্যা বের করা

  4. Matplotlib Python-এ 'imshow' ব্যবহার করে বাইভেরিয়েট ডিস্ট্রিবিউশন কীভাবে দেখাবেন?