এইচ 2 ইন মেমরি ডাটাবেস। সারণী পাওয়া যায় নি


182

আমি ইউআরএল সহ একটি এইচ 2 ডাটাবেস পেয়েছি "jdbc:h2:test"। আমি ব্যবহার করে একটি টেবিল তৈরি করি CREATE TABLE PERSON (ID INT PRIMARY KEY, FIRSTNAME VARCHAR(64), LASTNAME VARCHAR(64));। আমি তারপরে এই (খালি) টেবিল থেকে সমস্ত কিছু নির্বাচন করি SELECT * FROM PERSON। এ পর্যন্ত সব ঠিকই.

যাইহোক, আমি যদি ইউআরএল পরিবর্তন করি তবে "jdbc:h2:mem:test"ডাটাবেস হওয়ায় কেবলমাত্র তফাতটি এখন কেবল স্মৃতিতে রয়েছে, এটি আমাকে একটি দেয় org.h2.jdbc.JdbcSQLException: Table "PERSON" not found; SQL statement: SELECT * FROM PERSON [42102-154]। আমি সম্ভবত এখানে কিছু সাধারণ অনুপস্থিত, তবে কোনও সাহায্যের প্রশংসা করা হবে।


2
ইন-মেমরি মোডে স্যুইচ করার পরে আপনি Personআবার টেবিলটি তৈরি করতে পারেন । এইচ 2 আপনার আগে ডিস্কে তৈরি করা ডাটাবেস সম্পর্কে কিছুই জানে না।
বেনিয়ামিন মুশকো

প্রোগ্রামটির বাকি অংশগুলি পরিবর্তন হয়নি - আমি আবার টেবিলটি তৈরি করেছি।
উয়র্ন

উত্তর:


330

DB_CLOSE_DELAY=-1

hbm2ddl টেবিলটি তৈরি করার পরে সংযোগটি বন্ধ করে দেয়, তাই এইচ 2 এটিকে বাতিল করে দেয়।

আপনার যদি আপনার সংযোগ-ইউআরএলটি কনফিগার করা থাকে তবে

jdbc:h2:mem:test

শেষ সংযোগটি বন্ধ হওয়ার মুহুর্তে ডাটাবেসের সামগ্রী নষ্ট হয়ে যায়।

আপনি যদি আপনার সামগ্রী রাখতে চান তবে আপনাকে এই জাতীয় url কনফিগার করতে হবে

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

যদি এটি করে থাকে, এইচ 2 তার লিখিত সামগ্রী যতক্ষণ ভিএম বেঁচে থাকবে ততক্ষণ ধরে রাখবে ।

;কোলন ( :) এর পরিবর্তে সেমিকোলন ( ) লক্ষ করুন ।

বৈশিষ্ট্য পৃষ্ঠার ইন-মেমরি ডেটাবেস বিভাগটি দেখুন । উদ্ধৃতি থেকে:

ডিফল্টরূপে, কোনও ডাটাবেজে শেষ সংযোগ বন্ধ করা ডেটাবেস বন্ধ করে দেয়। ইন-মেমরি ডাটাবেসের জন্য, এর অর্থ সামগ্রীটি হারিয়ে গেছে। ডাটাবেস উন্মুক্ত রাখতে ;DB_CLOSE_DELAY=-1ডাটাবেস ইউআরএল যুক্ত করুন। ভার্চুয়াল মেশিনটি যতক্ষণ বেঁচে থাকবে ইন-মেমরি ডাটাবেসের সামগ্রীটি রাখতে, ব্যবহার করুন jdbc:h2:mem:test;DB_CLOSE_DELAY=-1


আমি মাঝামাঝি সময়ে নিজেই সমস্যাটি খুঁজে পেয়েছি, তবে হ্যাঁ, এটি সম্পূর্ণ সঠিক। ধন্যবাদ!
উয়র্ন

3
এবং এটি একটি নামযুক্ত মেমরি ডাটাবেস হতে হবে, jdbc:h2:mem:;DB_CLOSE_DELAY=-1কাজ করে না।
পিটার বেকার 0

আমরা কীভাবে মেমরির পরিবর্তে ফাইলটিতে ডেটা সঞ্চয় করতে পারি?
সুলেমান খান

8
যদি আপনি কোনও কোডে আপনার টেবিলগুলির নামকরণের জন্য লোয়ার কেস ব্যবহার করেন তবে আপনার জানা উচিত যে H2 বড় হাতের অক্ষরে ডিফল্টরূপে DATABASE_TO_UPPER = মিথ্যা ব্যবহার এড়াতে যেমন jdbc: h2: میم: পরীক্ষা; ডিবি_সিএলএল ডিফল = -1; DATABASE_TO_UPPER = মিথ্যা;
ওলেকসান্ডার পেট্রেনকো

@ অলেকসান্ডারপেট্রেনকো - সেই পিছনে ';' সমস্যা মনে হচ্ছে। আমি মনে করি আপনার এটি ছেড়ে দেওয়া দরকার।
ভোলসম্যান

102

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

;DATABASE_TO_UPPER=falseসংযোগের ইউআরএল যোগ করে সমাধান করা হয়েছে ।


7
বাহ - আপনি এটিকে ভাগ করে নিয়ে আমি খুব আনন্দিত! এটা কখনই ভাবা হত না।
এমএস-টিজি

1
যে প্রশ্ন জিজ্ঞাসা করা হয়েছিল তার সমাধান নয়, একই প্রশ্নটি অনুসন্ধান করার সময় আমার যে সমস্যার মুখোমুখি হয়েছিল তা সমাধান!
ইয়াতে

এই DATABASE_TO_UPPER=falseআইআরকিটি কোনও স্ক্রিপ্টে এসকিউএল স্টেটমেন্ট হিসাবে সেট করা সম্ভব ? (একইভাবে একটি বিবৃতি হিসাবে SET MODE PostgreSQL;) যদি তাই হয় তবে সঠিক বাক্য গঠন কী?
জোনিক

3
আমি কীভাবে এই একাধিকবার upvote করতে পারি? অনেক ধন্যবাদ! এটি প্রথম উত্তরের অংশ হওয়া উচিত।
রিবেসগ

11

বলা কঠিন. আমি এটি পরীক্ষা করার জন্য একটি প্রোগ্রাম তৈরি করেছি:

package com.gigaspaces.compass;

import org.testng.annotations.Test;

import java.sql.*;

public class H2Test {
@Test
public void testDatabaseNoMem() throws SQLException {
    testDatabase("jdbc:h2:test");
}
@Test
public void testDatabaseMem() throws SQLException {
    testDatabase("jdbc:h2:mem:test");
}

private void testDatabase(String url) throws SQLException {
    Connection connection= DriverManager.getConnection(url);
    Statement s=connection.createStatement();
    try {
    s.execute("DROP TABLE PERSON");
    } catch(SQLException sqle) {
        System.out.println("Table not found, not dropping");
    }
    s.execute("CREATE TABLE PERSON (ID INT PRIMARY KEY, FIRSTNAME VARCHAR(64), LASTNAME VARCHAR(64))");
    PreparedStatement ps=connection.prepareStatement("select * from PERSON");
    ResultSet r=ps.executeQuery();
    if(r.next()) {
        System.out.println("data?");
    }
    r.close();
    ps.close();
    s.close();
    connection.close();
}
}

কোনও ব্যর্থতা এবং অপ্রত্যাশিত আউটপুট ছাড়াই পরীক্ষাটি সমাপ্তির দিকে চলে। আপনি এইচ 2 এর কোন সংস্করণটি চালাচ্ছেন?


আমি আগামীকাল চেষ্টা করব, ধন্যবাদ। এইচ 2 সংস্করণটি হ'ল আমি আজই সাইটটি পেয়েছি: 1.3.154
জর্ন

1
আমি মনে করি আমি সমস্যাটি পেয়েছি। আমি যখন সংযোগটি টেবিলটি তৈরি করে দিয়ে তৈরি করেছিলাম তখন একটি নতুন খুলুন, ডিবি চলে গেছে। পূর্ববর্তীটি বন্ধ করার আগে আমি যখন নতুন সংযোগটি খুলি, তখন ডেটা থেকে যায়। আমি যখন কোনও ফাইল ব্যবহার করি তখন ডেটা (স্পষ্টতই) সর্বদা থাকে।
উয়র্ন

7

এইচ 2 ইন-মেমরি ডাটাবেস জেভিএমের ভিতরে মেমরিতে ডেটা সঞ্চয় করে। যখন JVM প্রস্থান করে, এই ডেটাটি হারিয়ে যায়।

আমি সন্দেহ করি যে আপনি যা করছেন তা নীচের দুটি জাভা ক্লাসের মতো। এই শ্রেণীর মধ্যে একটি একটি সারণী তৈরি করে এবং অন্যটি এতে sertোকানোর চেষ্টা করে:

import java.sql.*;

public class CreateTable {
    public static void main(String[] args) throws Exception {
        DriverManager.registerDriver(new org.h2.Driver());
        Connection c = DriverManager.getConnection("jdbc:h2:mem:test");
        PreparedStatement stmt = c.prepareStatement("CREATE TABLE PERSON (ID INT PRIMARY KEY, FIRSTNAME VARCHAR(64), LASTNAME VARCHAR(64))");
        stmt.execute();
        stmt.close();
        c.close();
    }
}

এবং

import java.sql.*;

public class InsertIntoTable {
    public static void main(String[] args) throws Exception {
        DriverManager.registerDriver(new org.h2.Driver());
        Connection c = DriverManager.getConnection("jdbc:h2:mem:test");
        PreparedStatement stmt = c.prepareStatement("INSERT INTO PERSON (ID, FIRSTNAME, LASTNAME) VALUES (1, 'John', 'Doe')");
        stmt.execute();
        stmt.close();
        c.close();
    }
}

আমি যখন এই ক্লাসগুলি একের পর এক চালাচ্ছিলাম, আমি নিম্নলিখিত আউটপুটটি পেয়েছি:

সি: \ ব্যবহারকারীরা \ লুক \ স্টাফ> জাভা ক্রিয়েটটেবল

সি: \ ব্যবহারকারীরা \ লুক \ স্টাফ> জাভা ইনসার্টইন্টো টেবিল
থ্রেড "মূল" org.h2.jdbc.JdbcSQLException: ব্যতিক্রম টেবিল "ব্যক্তি" পাওয়া যায় নি; এসকিউএল বিবৃতি:
ব্যক্তির মধ্যে অন্তর্ভুক্ত করুন (আইডি, প্রথম নাম, লাস্টনেম) ভ্যালু (1, 'জন', 'ডো') [42102-154]
        org.h2.message.DbException.getJdbcSQLException (DbException.java:327) এ
        org.h2.message.DbException.get (DbException.javaedia67) এ
        org.h2.message.DbException.get (DbException.javaedia44) এ
        ...

প্রথম javaপ্রক্রিয়াটি প্রস্থান করার সাথে সাথেই তৈরি টেবিলটি CreateTableআর বিদ্যমান নেই। সুতরাং, যখন InsertIntoTable শ্রেণি বরাবর আসে, এটি toোকানোর জন্য কোনও টেবিল নেই।

আমি যখন সংযোগের স্ট্রিংগুলিতে পরিবর্তন করেছি তখন আমি jdbc:h2:testদেখতে পেলাম যে এরকম কোনও ত্রুটি নেই। আমি এটিও দেখতে পেলাম যে একটি ফাইল test.h2.dbউপস্থিত হয়েছিল। এইচ 2 টেবিলটি এখানে রেখেছিল এবং এটি ডিস্কে সঞ্চিত থাকায় সারণিটি InsertIntoTable শ্রেণীর সন্ধানের জন্য এখনও সেখানে ছিল।


1
দয়া করে নোট করুন যে registerDriver()কলটি অপ্রয়োজনীয়: প্রথমত: একটি সাধারণ ক্লাস.ফোর্নাম () বেশিরভাগ জেডিবিসি ড্রাইভারের জন্য একই কাজ করে এবং (আরও গুরুত্বপূর্ণভাবে) এটি জাভা und আনড আপের জন্য সম্পূর্ণ অপ্রয়োজনীয়, যা জেডিবিসি চালকদের অটো-ডিটেক্ট করে (সামঞ্জস্যপূর্ণ) ক্লাসপাথ।
জোচিম সৌর

মেমরির একটি ডিবি কেবল ততক্ষণ বিদ্যমান থাকে যতক্ষণ মেমরির মালিকানাধীন প্রোগ্রামটি চলছে? বাহ, আমার কোনও ধারণা ছিল না> _ <তবে সত্যই, আমি জানি আমি কী করতে চাইছি। আপনার উত্তর পড়া, আমি নিশ্চিত যে আপনি করছেন।
উয়র্ন

2
@ জর্ন: আপনি কি করতে চাইছেন তা আমি জানি না, আপনি কী তথ্য সরবরাহ করেছেন তার ভিত্তিতে অনুমান করছি। আপনার সমস্যাটি প্রমাণ করে একটি এসএসসিসিই ( এসএসসিএইস.আর.জি ) সরবরাহ করা আরও সহায়ক হতে পারে - আমি আপনার প্রশ্নটিকে সেই বিষয়ে "সম্পূর্ণ" বলব না। আমি উপরোক্ত উত্তরটি সরবরাহ করেছি কারণ এসও-তে লোকেরা রয়েছে (মূলত প্রোগ্রামিংয়ের ক্ষেত্রে আগত), তারা মনে করতে পারে যে একটি 'ইন-মেমরি' ডাটাবেস কম্পিউটারের স্মৃতিতে ডেটা সংরক্ষণ করে যেখানে এটি প্রোগ্রামের অনুরোধের মধ্যে টিকে থাকতে পারে। আপনার প্রশ্ন আমাকে বোঝানোর জন্য এতটা সম্পূর্ণ হয়নি যে আপনি এই লোকগুলির মধ্যে একজন নন।
লুক উডওয়ার্ড

5

আমি যোগ করার চেষ্টা করেছি

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

তবে, এটি কোনও উপকারে আসেনি। উপর ও H2 সাইটে , আমি নিম্নলিখিত, যা প্রকৃতপক্ষে কিছু ক্ষেত্রে সাহায্য করতে পারে খুঁজে পেয়েছি।

ডিফল্টরূপে, কোনও ডাটাবেজে শেষ সংযোগ বন্ধ করা ডেটাবেস বন্ধ করে দেয়। ইন-মেমরি ডাটাবেসের জন্য, এর অর্থ সামগ্রীটি হারিয়ে গেছে। ডাটাবেসটি উন্মুক্ত রাখতে, ডাটাবেস URL- এ DB_CLOSE_DELAY = -1 যুক্ত করুন। ভার্চুয়াল মেশিনটি যতক্ষণ বেঁচে থাকবে ইন-মেমোরি ডাটাবেসের সামগ্রীটি রাখতে jdbc: h2: মেম: পরীক্ষা; ডিবি_সিএল </a> ব্যবহার করুন-

যাইহোক , আমার সমস্যাটি ছিল যে কেবলমাত্র স্কিমাটি ডিফল্টর চেয়ে আলাদা হবে। তাই ব্যবহারের জন্য insted

JDBC URL: jdbc:h2:mem:test

আমাকে ব্যবহার করতে হয়েছিল:

JDBC URL: jdbc:h2:mem:testdb

তখন টেবিলগুলি দৃশ্যমান ছিল


ধন্যবাদ, "টেস্টডিবি" আমার জন্যও ঠিক ছিল ("DB_CLOSE_DELAY = -1" ছাড়াও)!
boly38

4

আমার একই সমস্যা ছিল এবং আমি আমার কনফিগারেশনটিকে অ্যাপ্লিকেশন-টেস্ট.প্রেটিটিতে পরিবর্তন করেছি:

#Test Properties
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=create-drop

এবং আমার নির্ভরতা:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.198</version>
        <scope>test</scope>
    </dependency>

এবং পরীক্ষার শ্রেণিতে ব্যবহৃত টীকাগুলি:

@RunWith(SpringRunner.class)
@DataJpaTest
@ActiveProfiles("test")
public class CommentServicesIntegrationTests {
...
}

3

আমি টেবিল মেটা ডেটা আনার চেষ্টা করছিলাম, তবে নিম্নলিখিত ত্রুটি ছিল:

ব্যবহার:

String JDBC_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";

DatabaseMetaData metaData = connection.getMetaData();
...
metaData.getColumns(...);

একটি খালি রেজাল্টসেটটি ফিরিয়ে দিয়েছে।

পরিবর্তে নিম্নলিখিত URL টি ব্যবহার করে এটি সঠিকভাবে কাজ করেছে:

String JDBC_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false";

এখানে উল্লেখ করার দরকার ছিল: DATABASE_TO_UPPER = মিথ্যা


এটি এই উত্তরটির আওতায় নেই এমন কিছু যুক্ত করে না । পর্যালোচনা থেকে
ওয়াই হা লি

3

এইচ 2-কনসোলটি খোলার সময়, জেডিবিসি ইউআরএল অবশ্যই বৈশিষ্ট্যগুলিতে নির্দিষ্ট করা সাথে মেলে:

spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb

spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true

spring.h2.console.enabled=true

এখানে চিত্র বর্ণনা লিখুন

যা সুস্পষ্ট বলে মনে হচ্ছে, তবে আমি এটি বের করার জন্য কয়েক ঘন্টা ব্যয় করেছি ...


2

একটি নতুন এসসিআর / টেস্ট / রিসোর্স ফোল্ডার + সন্নিবেশ অ্যাপ্লিকেশন.প্রপার্টি ফাইল তৈরি করে সমাধান করা হয়েছে, স্পষ্টভাবে একটি পরীক্ষা ডিবেস তৈরির জন্য নির্দিষ্ট করে:

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create

1

আমি এই পোস্টে এসেছি কারণ আমার একই ত্রুটি ছিল।

আমার ক্ষেত্রে ডাটাবেস বিবর্তনগুলি কার্যকর করা হয়নি, সুতরাং টেবিলটি মোটেই ছিল না।

আমার সমস্যাটি হ'ল বিবর্তন স্ক্রিপ্টগুলির ফোল্ডার কাঠামোটি ভুল ছিল।

থেকে: https://www.playframework.com/docamentation/2.0/Evolutions

বেশ কয়েকটি বিবর্তন স্ক্রিপ্ট ব্যবহার করে খেলুন আপনার ডাটাবেস বিবর্তনগুলি অনুসরণ করে। এই স্ক্রিপ্টগুলি সাধারণ পুরানো এসকিউএল লিখিত এবং আপনার অ্যাপ্লিকেশনটির কনফ / বিবর্তন / {ডাটাবেস নাম} ডিরেক্টরিতে থাকা উচিত। যদি বিবর্তনগুলি আপনার ডিফল্ট ডাটাবেসে প্রযোজ্য হয় তবে এই পথটি কনফ / বিবর্তন / ডিফল্ট।

আমি একটি ফোল্ডার নামক ছিল সার্ভার / evolutions.default অন্ধকার দ্বারা সৃষ্টি করেছেন। আমি ফোল্ডার কাঠামোটিকে কনফ / বিবর্তন / ডিফল্টে সংশোধন করার পরে সমস্যাটি অদৃশ্য হয়ে গেল


0
<bean id="benchmarkDataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.h2.Driver" />
    <property name="url" value="jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>

0

ঠিক একই সমস্যা ছিল, উপরোক্ত সমস্ত চেষ্টা করে দেখুন, কিন্তু সাফল্য ছাড়াই। ত্রুটিটির বরং মজার কারণটি ছিল ডিবি টেবিলটি তৈরি হওয়ার আগে JVM খুব দ্রুত শুরু হয়েছিল (src.main.res উত্সে একটি ডেটা.এসকিএল ফাইল ব্যবহার করে)। তাই আমি "ব্যক্তি থেকে নির্বাচন করুন" কল করার আগে মাত্র একটি সেকেন্ডের জন্য অপেক্ষা করার জন্য একটি থ্রেড.স্লিপ (1000) টাইমার রেখেছি। এখন নির্দোষভাবে কাজ করা।

application.properties:

spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

data.sql:

create table person
(
id integer not null,
name varchar(255) not null,
location varchar(255),
birth_date timestamp,
primary key(id)
);

insert into person values (
10001, 'Tofu', 'home', sysdate()
);

PersonJdbcDAO.java:

    public List<Person> findAllPersons(){
    return jdbcTemplate.query("select * from person", 
        new BeanPropertyRowMapper<Person>(Person.class));
}

প্রধান শ্রেণি:

Thread.sleep(1000);
logger.info("All users -> {}", dao.findAllPersons());

0

স্প্রিং বুট সংস্করণ ২.২..6. এ স্প্রিং ডেটা জেপিএর নির্ভরতা যুক্ত করার পরে আমি এটি কাজ করে দেখলাম RE

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

এপ্লিকেশন.আইএমএলে এইচ 2 ডিবি কনফিগারেশন যুক্ত করুন -

spring:
  datasource:
    driverClassName: org.h2.Driver
    initialization-mode: always
    username: sa
    password: ''
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
  h2:
    console:
      enabled: true
      path: /h2
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: none

0

আমি এই কনফিগারেশনটি যুক্ত করে সমাধানটি পেয়েছি:

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

সম্পূর্ণ কনফিগারেশন (সাধারণ বসন্ত.ড্যাটাসোর্স.আরএল সহ):

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=sa
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop

আমি এইচ 2 সংস্করণ 1.4.200 এবং স্প্রিং-বুট 2.2.6.RELEASE নিয়ে কাজ করছি


-2

Time.sleep (1000);

এটা আমার জন্য কাজ। কেবল চেষ্টা করার জন্য, যদি আপনার পিসি ধীর হয় আপনি থ্রেডের সময়কাল বাড়িয়ে তুলতে পারেন যাতে ডিবি ঠিকঠাক কাজ করে এবং জেভিএম আমাদের টেবিলটি পেতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.