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

JSqlParser দিয়ে একটি তৈরি টেবিল স্টেটমেন্টে একটি প্রাথমিক কী যোগ করা

পার্সার হল এমন একটি প্রোগ্রাম যা শব্দ/বাক্যের অনুক্রমের ব্যাকরণ বুঝতে পারে এবং সিনট্যাক্টিক্যাল ট্রি উপস্থাপনা তৈরি করে। এটি প্রোগ্রামিং ভাষা, প্রাকৃতিক ভাষা প্রক্রিয়াকরণ, এসকিউএল এবং আরও অনেক ক্ষেত্রে ব্যবহার করা হচ্ছে। পার্সার ব্যবহার প্রদর্শনের জন্য, আমরা এই টিউটোরিয়ালে ওপেন সোর্স JSqlParser উল্লেখ করতে যাচ্ছি।

JSqlParser

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

টেবিল বিবৃতি তৈরি করুন

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

উপরের টেবিল তৈরি করুন বিবৃতিতে, আমরা স্টুডেন্ট_আইডি কলাম যোগ করতে চাই একটি প্রাথমিক কী হিসাবে।

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

ধাপ 1:নির্ভরতা হিসাবে JSqlParser যোগ করা

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

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

ধাপ 2:একটি ভেরিয়েবলে ইনপুট তৈরি করুন টেবিল স্টেটমেন্ট বরাদ্দ করুন

এটি আমাদের ইনপুট তৈরি করা টেবিল স্টেটমেন্ট যার প্রাথমিক কী নেই। নতুন লাইন অক্ষর \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" +
 ");";

ধাপ 3 :JSqlParser ব্যবহার করে SQL পার্স করুন

পার্সার ইউটিল ক্লাস CCJSqlParserUtil ব্যবহার করা হচ্ছে , আমরা পার্স পদ্ধতিকে CREATE TABLE sql এর আর্গুমেন্ট দিয়ে কল করছি।

Statement createTable = CCJSqlParserUtil.parse(createTableSql);

পার্স পদ্ধতি চালানোর পর, স্টেটমেন্ট অবজেক্ট createTable-এ নিচের মত জাভা ক্লাসের অনুক্রম রয়েছে।

JSqlParser দিয়ে একটি তৈরি টেবিল স্টেটমেন্টে একটি প্রাথমিক কী যোগ করা JSqlParser আউটপুট জাভা ক্লাসের অনুক্রম হিসাবে

পদক্ষেপ 4 :পার্সার আউটপুট অন্বেষণ করুন

পার্স পদ্ধতি সফলভাবে কার্যকর করা হলে, আমরা 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");

ধাপ 5 :সূচক হিসাবে প্রাথমিক কী সীমাবদ্ধতা তৈরি করুন

আমরা এসকিউএল-এ বিভিন্ন সূচক সেট করতে পারি যেমন চেক সীমাবদ্ধতা, সীমাবদ্ধতা বাদ দিন, বিদেশী কী এবং নামযুক্ত সীমাবদ্ধতা। প্রাথমিক কী-এর জন্য, আমাদের নিচের মতো একটি নামযুক্ত সীমাবদ্ধতা তৈরি করতে হবে।

//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);

ধাপ 6:টেবিল তৈরি করুন বিবৃতিতে সূচী সেট করুন

আমাদের নীচের মতো তৈরি টেবিলে সূচী তালিকা সেট করতে হবে যাতে প্রাথমিক কী দিয়ে তৈরি করা টেবিল স্টেটমেন্ট তৈরি করা হবে।

((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);
 }
 }
}

আউটপুট

আমরা নীচে দেখানো হিসাবে, নতুন CREATE TABLE তৈরি করা হয়েছে Student_id এর প্রাথমিক কী দিয়ে। এছাড়াও ডাটাবেস এবং টেবিলের নাম পরিবর্তন করে 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 পার্সার উদাহরণ

ত্রিভুজ No
  1. C++ এ দ্বৈতভাবে সংযুক্ত সার্কুলার তালিকা

  2. C++ এ একটি লিঙ্কযুক্ত তালিকা সমতল করা

  3. HTML <optgroup> নিষ্ক্রিয় বৈশিষ্ট্য

  4. পাইথন বনাম জাভাস্ক্রিপ্ট:বিকাশকারীদের জন্য মূল পার্থক্য ব্যাখ্যা করা হয়েছে