ক্লাস.ফোর্নামের ("oracle.jdbc.driver.OracleDriver") ব্যবহারের সময় কোন ডাটাবেসের সাথে সংযোগ করার সময়?


93

কি হুকুম করবে

Class.forName("oracle.jdbc.driver.OracleDriver")

ওরাকল ডাটাবেসের সাথে সংযোগ করার সময় ঠিক কী করবেন? একই জিনিস করার বিকল্প উপায় আছে?


6
সম্পর্কিত: stackoverflow.com/questions/5992126/loading-jdbc-driver নোট করুন যে আপনার অ্যাপ্লিকেশনটির প্রারম্ভকালীন সময় আপনাকে একবারেই এটি কল করতে হবে ; অ্যাপ্লিকেশনটির জীবদ্দশায় সংযোগ পাওয়ার আগে আপনাকে এটিকে কল করার দরকার নেই।
বালাসসি

@ বালুসসি ধরুন আমার ক্লাস কনস্ট্রাক্টরে Aআমি যেখানে আলাদা ক্লাসে কল করেছি তার সাথে আমার সংযোগের বিশদ রয়েছে এবং আমি যেখানে প্রতিটি সংযোগের প্রয়োজন সেখানে জাভা এড়িয়ে যাবে বা আবার লোড হবে এমন প্রতিটি সার্লেটের জন্য সংযোগের ক্ষেত্র পেতে আমি অবজেক্ট তৈরি করি ? Class.forName("oracle.jdbc.driver.OracleDriver")AA'sClass.forName("oracle.jdbc.driver.OracleDriver")
আসিফ মোশতাক

উত্তর:


72

এটি FQCN (সম্পূর্ণরূপে যোগ্য শ্রেণীর নাম) সহ শ্রেণি অবজেক্টের একটি রেফারেন্স অর্জন করে oracle.jdbc.driver.OracleDriver

নির্দিষ্ট ক্লাসটি বর্তমান বর্গ লোডার দ্বারা লোড করা হয়েছে কিনা তা নিশ্চিত করে বাদ দিয়ে এটি একটি ডাটাবেসে সংযোগের ক্ষেত্রে কিছু করতে "কিছুই করে না" । লেখার মধ্যে কোন মৌলিক পার্থক্য নেই

Class<?> driverClass = Class.forName("oracle.jdbc.driver.OracleDriver");
// and
Class<?> stringClass = Class.forName("java.lang.String");

Class.forName("com.example.some.jdbc.driver")কলগুলি লিগ্যাসি কোডে প্রদর্শিত হবে যা জেডিবিসি ব্যবহার করে কারণ এটি কোনও জেডিবিসি ড্রাইভার লোড করার উত্তরাধিকার উপায়

থেকে জাভা টিউটোরিয়াল :

জেডিবিসি-র পূর্ববর্তী সংস্করণগুলিতে সংযোগ পেতে, আপনাকে প্রথমে পদ্ধতিটি কল করে আপনার জেডিবিসি ড্রাইভারটি শুরু করতে হয়েছিল Class.forName। এই পদ্ধতিগুলির জন্য ধরণের একটি বিষয় প্রয়োজন java.sql.Driver। প্রতিটি জেডিবিসি ড্রাইভারের মধ্যে এক বা একাধিক ক্লাস থাকে যা ইন্টারফেস প্রয়োগ করে java.sql.Driver
...
আপনার শ্রেণীর পথে পাওয়া যে কোনও জেডিবিসি 4.0 ড্রাইভার স্বয়ংক্রিয়ভাবে লোড হয়ে যায়। (তবে, আপনাকে অবশ্যই পদ্ধতি সহ জেডিবিসি ৪.০ এর পূর্বে যেকোন ড্রাইভারই লোড করতে হবে Class.forName))

আরও পড়ুন (পড়ুন: প্রশ্নগুলি এটি একটি দ্বিধা)


29
অন্য কথায়, এটি আপনাকে আপনার ক্লাসের জন্য সুস্পষ্ট আমদানি না করে ড্রাইভার ক্লাসটি ব্যবহার করতে দেয়। এটি আপনাকে আপনার ক্লাসপথে ওরাকল চালক না করেই প্রকল্পটি তৈরি করতে দেয়।
JustinKSU

4
যদিও লক্ষ্য করা উচিত যে "উত্তরাধিকার পদ্ধতিতে" আপনি ড্রাইভারক্লাসের Class.forName()রেফারেন্স না ধরে কল করতেন , তাই এটি প্রথম নজরে কোনও অপ-অপারেশনের মতো মনে হয়
ম্যাট বি

11
কারণ একটি জেডিবিসি ড্রাইভারের একটি স্ট্যাটিক ইনিশিয়ালাইজার থাকা উচিত যা ড্রাইভারকে ম্যানেজারের সাথে চালকের নিবন্ধন করে। Class.forName () ব্যবহার করার সময় এই ইনিশিয়ালাইজারটি কার্যকর করা হয় এবং ড্রাইভার নিবন্ধিত হয়। যেহেতু জেডিবিসি 4.0.০ চালক ম্যানেজার নিজেই ক্লাসপথে ড্রাইভারগুলি খুঁজতে সার্ভিস লোডার ব্যবহার করে।
মার্ক রোটভিল

4
@ ম্যাটবাল, প্রি-জেডিবিসি Regarding.০ সম্পর্কিত, ড্রাইভারের একটি রেফারেন্স পেতে বা সেই ড্রাইভার শ্রেণীর একটি স্ট্যাটিক ফাংশন কল করা ইতিমধ্যে ড্রাইভার শ্রেণিকে স্বয়ংক্রিয়ভাবে লোড করবে। তাহলে আমাদের কেন ম্যানুয়ালি করতে হবে Class.forName("etc.driver")?
পেসারিয়ার

4
@ পেসিয়ার ভুল অনুমান। আপনি কোন ড্রাইভারটি লোড করতে চান তা জেডিবিসি জানে না, তাই জেডিবিসি-তে (যা ড্রাইভার-অজ্ঞেয়াত্মক) কিছুই নেই যা ড্রাইভার ক্লাসটি উল্লেখ করতে জানে। সুতরাং আপনার এমন কিছু দরকার যা একটি বর্গ বোঝা ট্রিগার করে। আমি মনে করি যে একটি স্থিতিশীল পদ্ধতি পরিবর্তে কাজ করবে Class.forName(...)
ম্যাট বল

13

এটি ড্রাইভার নিবন্ধন করে; ফর্মের কিছু:

public class SomeDriver implements Driver {
  static {
    try {
      DriverManager.registerDriver(new SomeDriver());
    } catch (SQLException e) {
      // TODO Auto-generated catch block
    }
  }

  //etc: implemented methods
}

7

থেকে জাভা JDBC এর টিউটোরিয়াল :

জেডিবিসি-র পূর্ববর্তী সংস্করণগুলিতে সংযোগ পেতে, আপনাকে প্রথমে পদ্ধতিটি কল করে আপনার জেডিবিসি ড্রাইভারটি শুরু করতে হয়েছিল Class.forName। আপনার শ্রেণীর পথে পাওয়া যে কোনও জেডিবিসি 4.0 ড্রাইভার স্বয়ংক্রিয়ভাবে লোড হয়ে যায়। (তবে, আপনাকে অবশ্যই পদ্ধতি সহ জেডিবিসি ৪.০ এর পূর্বে যেকোন ড্রাইভারই লোড করতে হবে Class.forName))

সুতরাং, আপনি যদি জাভা ১. with সহ ওরেकल ১১ জি (১১.১) ড্রাইভারটি ব্যবহার করেন তবে আপনাকে কল করার দরকার নেই Class.forName। অন্যথায়, ড্রাইভারটি আরম্ভ করার জন্য আপনাকে এটি কল করতে হবে।


4
@ জোনাথন বলতে কী বোঝাতে চেয়েছেন "ক্লাস.ফরনাম পদ্ধতিতে জেডিবিএস ৪.০ এর পূর্বে কোনও ড্রাইভার ম্যানুয়ালি লোড করুন" আপনি কি ব্যাখ্যা করতে পারেন?
অরবিন্দ

Class.forNameকল বাহিনী classloader দেওয়া বর্গ লোড করা হয়নি। টিউটোরিয়ালে বর্ণিত এটি ম্যানুয়াল লোডিং পদক্ষেপ।
জোনাথন

@ জোনাথন তাই আমার সংযোগ এখনও ছাড়াই কাজ করছে class.forName();:)
আসিফ মোশতাক

2

জাভা 6 প্রাক DriverManagerক্লাসে আপনি কোন জেডিবিসি ড্রাইভারটি ব্যবহার করতে চেয়েছিলেন তা জানতেন না। Class.forName("...")ড্রাইভার ক্লাস প্রাক লোড করার একটি উপায় ছিল।

আপনি যদি জাভা 6 ব্যবহার করেন তবে আপনার আর এটি করার দরকার নেই।


হ্যাঁ, একটি ব্যবহার করা দরকার: ওরাকলডেটা সোর্স এখন ডকস.অরাকল. com/cd/B28359_01/java.111/b31224/urls.htm# i1070726 এবং এটি নিজেই ইউআরএল তৈরি করে: চূড়ান্ত ওরাকলডাটাসোর্স ডিএস = নতুন ওরাকলডিটাসোর্স (); ds.setDriverType ("পাতলা"); ds.setServerName (হোস্টনাম); ds.setPortNumber (পোর্ট); //ds.setDatabaseName(dbName); ds.setServiceName (dbName); সংযোগ = ds.getConnication (ব্যবহারকারী, pwd);
রাজেশ গোয়েল

1

এই কমান্ডটি ড্রাইভার ম্যানেজার উদাহরণের জন্য উপলব্ধ ওরাকল jdbc ড্রাইভারের ক্লাস লোড করে। ক্লাসটি লোড হওয়ার পরে সিস্টেম এটি ব্যবহার করে ওরাকলের সাথে সংযুক্ত হতে পারে। বিকল্প হিসাবে আপনি ড্রাইভারম্যানেজারের রেজিস্ট্রড্রাইভার পদ্ধতিটি ব্যবহার করতে পারেন এবং আপনার প্রয়োজন জেডিবিসি ড্রাইভারের উদাহরণ সহ এটি পাস করতে পারেন।



0

Oracle.jdbc.OracleDriver ব্যবহার করুন, oracle.jdbc.driver.OracleDriver নয়। আপনি যদি টমক্যাট ব্যবহার করছেন তবে ড্রাইভার জার ফাইলটি "WEB-INF \ lib" ডিরেক্টরিতে থাকলে এটি নিবন্ধ করার দরকার নেই do এটিকে টেস্ট.জেএসপি হিসাবে সংরক্ষণ করুন এবং এটি আপনার ওয়েব ডিরেক্টরিতে রেখে দিন এবং টমক্যাট পরিচালকের মধ্যে আপনার ওয়েব অ্যাপ্লিকেশন ফোল্ডারটি পুনরায় চালু করুন:

<%@ page import="java.sql.*" %>

<HTML>
<HEAD>
<TITLE>Simple JSP Oracle Test</TITLE>
</HEAD><BODY>
<%
Connection conn = null;
try {
    Class.forName("oracle.jdbc.OracleDriver");
    conn = DriverManager.getConnection("jdbc:oracle:thin:@XXX.XXX.XXX.XXX:XXXX:dbName", "user", "password");
    Statement stmt = conn.createStatement();
    out.println("Connection established!");
}
catch (Exception ex)
{
    out.println("Exception: " + ex.getMessage() + "");

}
finally
{
    if (conn != null) {
        try {
            conn.close();   
        }
        catch (Exception ignored) {
            // ignore
        }
    }
}

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