এইচ 2 বা এইচএসকিউএলডি ইন-মেমরি ডাটাবেসের সামগ্রী দেখুন


90

এইচ 2 বা এইচএসকিউএলডি ইন-মেমরি ডাটাবেস দেখার জন্য কি কোনও উপায় আছে? উদাহরণস্বরূপ, ফ্লাশ কখন কার্যকর হয় তা পরীক্ষা করতে হাইবারনেটের সাথে ডিবাগিং সেশনের সময়; বা ডিবি তাত্ক্ষণিকভাবে স্ক্রিপ্ট প্রত্যাশিত ফলাফল দেয় তা নিশ্চিত করার জন্য।

এটির জন্য কোনও সংযোজন বা পাঠাগার রয়েছে যা আপনি আপনার কোড সহ এম্বেড করতে পারেন?

দয়া করে উল্লেখ করুন, আপনি কোনটির বিষয়ে কথা বলছেন (এইচ 2 বা এইচএসকিউএলডিবি) যদি আপনার কারওর একটির সাথে নির্দিষ্ট উত্তর রয়েছে।


উত্তর:


59

আপনি নিজের অ্যাপ্লিকেশনের মধ্যে এইচ 2 ওয়েব সার্ভার চালাতে পারেন যা একই মেমোরি ডাটাবেসটিতে অ্যাক্সেস করবে। এছাড়াও আপনি ও H2 মত কোন জেনেরিক JDBC এর ক্লায়েন্ট ব্যবহার সার্ভার মোডে চলমান অ্যাক্সেস করতে পারেন SquirrelSQL

হালনাগাদ:

Server webServer = Server.createWebServer("-web,-webAllowOthers,true,-webPort,8082").start();
Server server = Server.createTcpServer("-tcp,-tcpAllowOthers,true,-tcpPort,9092").start();

এখন আপনি jdbc:h2:mem:foo_dbএকই প্রক্রিয়াটির মধ্যে URL এর মাধ্যমে আপনার ডাটাবেসের সাথে সংযোগ করতে পারেন বা foo_dbব্যবহার করে ডাটাবেস ব্রাউজ করতে পারেন localhost:8082। উভয় সার্ভার বন্ধ মনে রাখবেন। আরও দেখুন: মেমরি মোডে এইচ 2 ডাটাবেস কনসোল দ্বারা অ্যাক্সেস করা যায় না

আপনি স্প্রিং ব্যবহার করতে পারেন:

<bean id="h2Server" class="org.h2.tools.Server" factory-method="createTcpServer" init-method="start" destroy-method="stop" depends-on="h2WebServer">
    <constructor-arg value="-tcp,-tcpAllowOthers,true,-tcpPort,9092"/>
</bean>
<bean id="h2WebServer" class="org.h2.tools.Server" factory-method="createWebServer" init-method="start" destroy-method="stop">
    <constructor-arg value="-web,-webAllowOthers,true,-webPort,8082"/>
</bean>

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" depends-on="h2Server">
    <property name="driverClass" value="org.h2.Driver"/>
    <property name="jdbcUrl" value="jdbc:h2:mem:foo_db"/>
</bean>

বিটিডাব্লু আপনার কেবলমাত্র উপর নির্ভর করে এবং ডাটাবেসের বিষয়বস্তুতে ম্যানুয়াল পিকিংয়ের উপর নির্ভর করে না। এটি কেবল সমস্যা সমাধানের জন্য ব্যবহার করুন।

এনবি আপনি যদি বসন্ত পরীক্ষার কাঠামো ব্যবহার করেন তবে আপনি কোনও চলমান লেনদেনের দ্বারা পরিবর্তনগুলি দেখতে পাবেন না এবং এই লেনদেন পরীক্ষার পরপরই ফিরে আসবে।


4
আমি ত্রুটি পেয়েছি যে "সত্য" অবৈধ বিকল্প। ওয়েবেএলোঅথাররা কি প্যারামিটার ব্যবহার করত? সর্বশেষতম এইচ 2 কোড সহ এটি কোনও পরামিতি নেয় না। এখানে "মূল" পদ্ধতিটি দেখুন: h2database.com/javadoc/org/h2/tools/Server.html
hshib

4
যেমন হান উল্লেখ করেছেন, সর্বশেষ সংস্করণ "সত্য" পরামিতি গ্রহণ করে না তাই কেবল এটি সরিয়ে ফেলুন:<constructor-arg value="-web,-webAllowOthers,-webPort,8082"/>
মাইক আর

4
নতুন সংস্করণগুলি পৃথক যুক্তি কনভেনশন অনুসরণ করে Server.createTcpServer("-tcpPort" ,"9092", "-tcpAllowOthers") Server.createWebServer("-webPort", "8082", "-tcpAllowOthers")
জোর

7
খাঁটি জাভাতে, আপনাকে "সত্য" পরামিতিটি সরিয়ে ফেলতে হবে এবং এর মতো পরামিতিগুলি পৃথক করতে হবে:Server.createWebServer("-web", "-webAllowOthers", "-webPort", "8082").start();
xnopre

4
স্প্রিং বুট দিয়ে আপনি সহজেই আপনার অ্যাপ্লিকেশন.প্রপার্টি ফাইলগুলিতে "h2.console.enabled: true" এবং "h2.console.path: h2-কনসোল" সেট করতে পারেন।
user2754985

33

এইচ 2 এর জন্য, আপনার যদি একটি ডেটাবেস সংযোগ অবজেক্ট থাকে তবে আপনি ডিবাগিং সেশনের সময় আপনার কোডের মধ্যে একটি ওয়েব সার্ভার শুরু করতে পারেন । আপনি এই কোডটি আপনার কোডে যুক্ত করতে পারেন, বা একটি 'ওয়াচ এক্সপ্রেশন' হিসাবে (গতিশীল):

org.h2.tools.Server.startWebServer(conn);

সার্ভার সরঞ্জামটি স্থানীয়ভাবে একটি ওয়েব ব্রাউজার শুরু করবে যা আপনাকে ডাটাবেস অ্যাক্সেস করতে দেয়।


4
- যারা স্প্রিং ডেটা ব্যবহার করছেন জন্য মন্তব্য আপনি এই ভাবে ApplicationContext থেকে সংযোগ পেতে পারেন: ((ডেটাউত্স) context.getBean ( "ডেটাউত্স")) getConnection ()।
ওডিসিয়াস

এটি JUnit TestWatcher @ Rule- এও দুর্দান্ত
ওয়েবারজান

4
এটি ডিবাগ করার সময় আপনি ইন্টেলিজজে "ভ্যালুয়েটএক্সপ্রেসন" দিয়ে ঠাট্টা করলেও এটি কাজ করে। (বন্ধ না হওয়া অবধি বাকী ঘড়িটি তালাবদ্ধ করে রাখে)
বোরজব

আমি DataSourceআমার পরীক্ষার ক্ষেত্রে উদাহরণটি স্বয়ংক্রিয়ভাবে ওয়্যার্ড করেছি এবং শরীরের সাথে একটি পদ্ধতি যুক্ত করেছি org.h2.tools.Server.startWebServer(dataSource.getConnection());। এখন সেই পদ্ধতির মূল্যায়ন ব্রাউজারটি খুলবে। মনে রাখবেন যে আপনি সংযোগ বিচ্ছিন্ন না হওয়া পর্যন্ত মৃত্যুদন্ড কার্যকর করার কারণ হতে পারে (ব্রাউজারে শীর্ষ-বাম আইকন)!
টম

9

এইচ 2 এ, আমার জন্য কী কাজ করে তা হল:

আমি কোড করি, সার্ভারটি শুরু করে:

server = Server.createTcpServer().start();

এটি localhostপোর্ট 9092 এ সার্ভারটি শুরু করে ।

তারপরে কোডে নিম্নলিখিত জেডিবিসি ইউআরএল-এ একটি ডিবি সংযোগ স্থাপন করুন:

jdbc:h2:tcp://localhost:9092/mem:test;DB_CLOSE_DELAY=-1;MODE=MySQL

ডিবাগিংয়ের সময়, ডিবিটি পরিদর্শন করার জন্য ক্লায়েন্ট হিসাবে আমি এইচ 2 সরবরাহিত একটি ব্যবহার করি, যা যথেষ্ট ভাল, এটি চালু করার জন্য আপনাকে কেবল নীচের জাভা মূলটি আলাদাভাবে চালু করতে হবে

org.h2.tools.Console

এটি 8082 এ একটি অ্যাপ্লিকেশন সহ একটি ওয়েব সার্ভার শুরু করবে, একটি ব্রাউজার চালু করবে localhost:8082

এবং তারপরে আপনি ডিবি দেখতে পূর্বের ইউআরএল প্রবেশ করতে পারেন


4

এইচএসকিউএলডিবি সহ আপনার কয়েকটি বিল্ট-ইন বিকল্প রয়েছে।

দুটি জিইউআই ডাটাবেস পরিচালক এবং ডাটাবেসে একটি কমান্ড লাইন ইন্টারফেস রয়েছে। এর জন্য ক্লাসগুলি হ'ল:

org.hsqldb.util.DatabaseManager
org.hsqldb.util.DatabaseManagerSwing
org.hsqldb.cmdline.SqlTool

আপনি আপনার অ্যাপ্লিকেশন থেকে উপরের একটিটি শুরু করতে এবং ইন-মেমরি ডেটাবেসগুলিতে অ্যাক্সেস করতে পারেন।

জেবস সহ একটি উদাহরণ এখানে দেওয়া হয়েছে:

http://docs.jboss.org/jbpm/v3.2/userguide/html/ch07s03.html

কোনও মেমোরি ডাটাবেসের দিকে ইঙ্গিত করে আপনি নিজের অ্যাপ্লিকেশনটি দিয়ে একটি সার্ভারও শুরু করতে পারেন।

org.hsqldb.Server

দস্তাবেজ অনুসারে, আপনি যে কোনও জেডিবিসি সংযোগের সাথে একটি "ম্যানেজার" ব্যবহার করতে পারেন, সুতরাং এটি এইচ 2 এর জন্যও কাজ করবে :) hsqldb.org/doc/2.0/util-guide/dbm-chapt.html
রোজারডপ্যাক

3

আপনি এটি জেএমএক্স বৈশিষ্ট্য হিসাবে প্রকাশ করতে পারেন, জে কনসোলের মাধ্যমে শুরুযোগ্য:

@ManagedResource
@Named
public class DbManager {

    @ManagedOperation(description = "Start HSQL DatabaseManagerSwing.")
    public void dbManager() {
        String[] args = {"--url", "jdbc:hsqldb:mem:embeddedDataSource", "--noexit"};
        DatabaseManagerSwing.main(args);
    }
}

এক্সএমএল প্রসঙ্গে:

<context:component-scan base-package="your.package.root" scoped-proxy="targetClass"/>
<context:annotation-config />
<context:mbean-server />
<context:mbean-export />

3

এইচ 2 টিসিপি এবং ওয়েব সার্ভারগুলি সূচনা করার জন্য এটি প্লে 2 নিয়ামক:

package controllers;

import org.h2.tools.Server;
import play.mvc.Controller;
import play.mvc.Result;

import java.sql.SQLException;

/**
 * Play 2 controller to initialize H2 TCP Server and H2 Web Console Server.
 *
 * Once it's initialized, you can connect with a JDBC client with
 * the URL `jdbc:h2:tcp://127.0.1.1:9092/mem:DBNAME`,
 * or can be accessed with the web console at `http://localhost:8082`,
 * and the URL JDBC `jdbc:h2:mem:DBNAME`.
 *
 * @author Mariano Ruiz <mrsarm@gmail.com>
 */
public class H2ServerController extends Controller {

    private static Server h2Server = null;
    private static Server h2WebServer = null;

    public static synchronized Result debugH2() throws SQLException {
        if (h2Server == null) {
            h2Server = Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092");
            h2Server.start();
            h2WebServer = Server.createWebServer("-web","-webAllowOthers","-webPort","8082");
            h2WebServer.start();
            return ok("H2 TCP/Web servers initialized");
        } else {
            return ok("H2 TCP/Web servers already initialized");
        }
    }
}

3

এইচএসকিউএলডিবি-র জন্য, নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছে:

DatabaseManager.threadedDBM();

এবং এটি আমার টেবিল এবং ডেটা সহ জিইউআই আনল একবার আমি এটিকে স্মৃতিযুক্ত ডাটাবেসটির ডানদিকে দেখিয়েছি।

এটি মূলত একটি DatabaseManager(নন সুইং প্রকারের) নতুন করার সমতুল্য , যা সংযোগের বিশদ জানতে অনুরোধ করে এবং এতে সেট করা থাকে --noexit)

আমি সুইং সংস্করণটিও চেষ্টা করেছিলাম, তবে এটি কেবল একটি ছিল mainএবং আমি যুক্তিগুলি পাস করার বিষয়ে নিশ্চিত নই। যদি কেউ জানেন তবে দয়া করে এখানে পোস্ট করুন।

কেবলমাত্র আমি সঠিক ডাটাবেসের নামের জন্য কয়েক ঘন্টা অনুসন্ধান করেছি কারণ: ডাটাবেসের নামটি আপনার ডাটাসোর্সের নাম। সুতরাং ইউআরএল জেডিবিসি: এইচএসকিএলডিবি: মেম: ডেটা সোর্স দিয়ে চেষ্টা করুন যদি আপনার আইডি = ডাটাসোর্স সহ কোনও ডেটা উত্স বিন থাকে। এটি যদি কাজ না করে তবে টেস্টডিবি চেষ্টা করুন যা ডিফল্ট।


4
org.hsqldb.util.DatabaseManagerSwing.main (নতুন স্ট্রিং [] {"--url", ইউআরএল, "- ব্যবহারকারীর", ব্যবহারকারী নাম, "- পাসওয়ার্ড", পাসওয়ার্ড});
পেট্রো সেমেনিয়ুক

এখানে প্যারামিটার কিছু ব্যাখ্যা আছে: stackoverflow.com/a/3076005/32453
rogerdpack

1

১.৩.১76 to এ Connection is broken: "unexpected status 16843008"ডাউনগ্রেড না হওয়া পর্যন্ত ইন-মেমরিতে (পাশাপাশি ফাইলটিতে) H2 সংস্করণ 1.4.190 দূরবর্তী সংযোগ নিয়ে আমার একটি সমস্যা আছে I've H2 টিসিপি সার্ভার হ্যাং করে গ্রিলগুলি দেখুন


1

এটি উত্তরের চেয়ে আগের থমাস মোলারের পোস্টে আরও বেশি মন্তব্য, তবে এর পক্ষে যথেষ্ট খ্যাতি পাইনি। আপনি যদি স্প্রিং জেডিবিসি টেমপ্লেট হন তবে সংযোগটি পাওয়ার আরও একটি উপায় নিম্নলিখিতটি ব্যবহার করছে:

jdbcTemplate.getDataSource().getConnection();

সুতরাং ডিবাগ মোডে আপনি যদি একটিগ্রহের "এক্সপ্রেশন" ভিউটিতে যুক্ত করেন তবে এটি আপনাকে এইচ 2 কনসোল দেখিয়ে ব্রাউজারটি খুলবে:

org.h2.tools.Server.startWebServer(jdbcTemplate.getDataSource().getConnection());

এক্সিলিপ এক্সপ্রেশন ভিউ

এইচ 2 কনসোল


0

আপনার মেশিনে কেন এটি ঠিকঠাক কাজ করছে জানি না, তবে এটি কাজ করার জন্য আমাকে একটি দিন ব্যয় করতে হয়েছিল।

সার্ভারটি "jdbc: h2: tcp: // লোকালহোস্ট: 9092 / ~ / ডিফল্ট" এর মাধ্যমে ইন্টেলিজ আইডিয়া ইউয়ের সাথে কাজ করে।

ব্রাউজারে "লোকালহোস্ট: 8082" ঠিকঠাক কাজ করে।

আমি এটি এমভিসি-প্রেরণকারী-সার্লেটলেট.এক্সএমএলে যুক্ত করেছি

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" depends-on="h2Server">
    <property name="driverClassName" value="org.h2.Driver"/>
    <property name="url" value="jdbc:h2:tcp://localhost:9092/~/default"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
</bean>

<bean id="h2Server" class="org.h2.tools.Server" factory-method="createTcpServer" init-method="start" destroy-method="stop" depends-on="h2WebServer">
    <constructor-arg>
        <array>
            <value>-tcp</value>
            <value>-tcpAllowOthers</value>
            <value>-tcpPort</value>
            <value>9092</value>
        </array>
    </constructor-arg>
</bean>

<bean id="h2WebServer" class="org.h2.tools.Server" factory-method="createWebServer" init-method="start" destroy-method="stop">
    <constructor-arg>
        <array>
            <value>-web</value>
            <value>-webAllowOthers</value>
            <value>-webPort</value>
            <value>8082</value>
        </array>
    </constructor-arg>
</bean>

0

ওডিবিসি এবং এমএস-অ্যাক্সেস, এক্সেলের উপর আরামদায়ক সামগ্রী (এবং সম্পাদনা) সম্পর্কে কী? সফটওয়্যার রূপান্তর ::

  • এইচ 2 সংস্করণ: 1.4.196
  • উইন 10 পোস্টগ্রিস ওডিবিসি ড্রাইভার সংস্করণ: psqlodbc_09_03_0210
  • উইন 7 ওডিবিসি ক্লায়েন্টের জন্য: win7_psqlodbc_09_00_0101-x64.msi

এইচ 2 সার্ভার:

/*
For JDBC Clients to connect:
jdbc:h2:tcp://localhost:9092/trader;CIPHER=AES;IFEXISTS=TRUE;MVCC=true;LOCK_TIMEOUT=60000;CACHE_SIZE=131072;CACHE_TYPE=TQ
*/
public class DBStarter {
    public static final String BASEDIR = "/C:/Trader/db/";
    public static final String DB_URL = BASEDIR + "trader;CIPHER=AES;IFEXISTS=TRUE;MVCC=true;LOCK_TIMEOUT=10000;CACHE_SIZE=131072;CACHE_TYPE=TQ";

  static void startServer() throws SQLException {
        Server tcpServer = Server.createTcpServer(
                "-tcpPort", "9092",
                "-tcpAllowOthers",
                "-ifExists",
//                "-trace",
                "-baseDir", BASEDIR
        );
        tcpServer.start();
        System.out.println("H2 JDBC Server started:  " + tcpServer.getStatus());

        Server pgServer = Server.createPgServer(
                "-pgPort", "10022",
                "-pgAllowOthers",
                "-key", "traderdb", DB_URL
        );
        pgServer.start();
        System.out.println("H2 ODBC PGServer started: " + pgServer.getStatus());

    }
}   

উইন্ডোজ 10 ওডিবিসি ডেটাসোর্স কনফিগারেশন যা কোনও ওডিবিসি ক্লায়েন্ট ব্যবহার করতে পারে: ডাটাবেস ক্ষেত্রে '-key' প্যারামিটারে দেওয়া নামটি ব্যবহার করতে হবে। ওডিবিসি কনফিগারেশন

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