জাভাতে একটি এসকিউএল স্ট্রিং তৈরির সবচেয়ে সহজ উপায়


107

আমি ডাটাবেস ম্যানিপুলেশন করতে একটি এসকিউএল স্ট্রিং তৈরি করতে চাই (আপডেটগুলি, মুছে ফেলুন, সন্নিবেশ করান, নির্বাচন করুন, সেই ধরণের জিনিস) - লক্ষ লক্ষ "+" এর কোট ব্যবহার করে ভয়ঙ্কর স্ট্রিং কনট্যাট পদ্ধতির পরিবর্তে যা সর্বোপরি অপঠনযোগ্য - সেখানে একটি ভাল উপায় হতে হবে।

আমি মেসেজফর্ম্যাটটি ব্যবহার করার কথা ভেবেছিলাম - তবে এটি ব্যবহারকারীর বার্তাগুলির জন্য ব্যবহার করার কথা, যদিও আমি মনে করি এটি একটি যুক্তিসঙ্গত কাজ করবে - তবে আমার ধারণা জাভা এসকিউএল লাইব্রেরিতে এসকিউএল টাইপ অপারেশনগুলিতে আরও কিছু সংযুক্ত থাকা উচিত।

গ্রোভির কি কোনও ভাল লাগবে?

উত্তর:


76

সবার আগে প্রস্তুত বিবৃতিগুলিতে ক্যোয়ারী প্যারামিটারগুলি ব্যবহার করে বিবেচনা করুন:

PreparedStatement stm = c.prepareStatement("UPDATE user_table SET name=? WHERE id=?");
stm.setString(1, "the name");
stm.setInt(2, 345);
stm.executeUpdate();

অন্য যে জিনিসটি করা যায় তা হ'ল সমস্ত প্রশ্নগুলি সম্পত্তি ফাইলে রাখা। উদাহরণস্বরূপ একটি ক্যোয়ারীতে.প্রপার্টি ফাইলগুলিতে উপরের ক্যোয়ারীটি রাখা যেতে পারে:

update_query=UPDATE user_table SET name=? WHERE id=?

তারপরে একটি সাধারণ ইউটিলিটি শ্রেণীর সহায়তায়:

public class Queries {

    private static final String propFileName = "queries.properties";
    private static Properties props;

    public static Properties getQueries() throws SQLException {
        InputStream is = 
            Queries.class.getResourceAsStream("/" + propFileName);
        if (is == null){
            throw new SQLException("Unable to load property file: " + propFileName);
        }
        //singleton
        if(props == null){
            props = new Properties();
            try {
                props.load(is);
            } catch (IOException e) {
                throw new SQLException("Unable to load property file: " + propFileName + "\n" + e.getMessage());
            }           
        }
        return props;
    }

    public static String getQuery(String query) throws SQLException{
        return getQueries().getProperty(query);
    }

}

আপনি আপনার প্রশ্নগুলি নিম্নলিখিত হিসাবে ব্যবহার করতে পারেন:

PreparedStatement stm = c.prepareStatement(Queries.getQuery("update_query"));

এটি একটি বরং সহজ সমাধান, তবে ভাল কাজ করে।


1
আমি এই জাতীয় একটি পরিষ্কার এসকিউএল নির্মাতাকে ব্যবহার করতে পছন্দ করি: mentabean.soliverajr.com
ট্রেডারজয়েচিকাগো

2
আমি আপনাকে পরামর্শ দিতে পারি যে আপনি বিবৃতিটির InputStreamঅভ্যন্তরটি রেখে দিন if (props == null)যাতে এটি যখন প্রয়োজন হয় না তখন তা তাত্ক্ষণিকভাবে তৈরি না করে।
সিনট্যাক্সস বিধিগুলি

64

স্বেচ্ছাসেবক এসকিউএল-এর জন্য, জুকউ ব্যবহার করুন । jOOQ বর্তমানে সমর্থন SELECT, INSERT, UPDATE, DELETE, TRUNCATE, এবং MERGE। আপনি এসকিউএল এটি তৈরি করতে পারেন:

String sql1 = DSL.using(SQLDialect.MYSQL)  
                 .select(A, B, C)
                 .from(MY_TABLE)
                 .where(A.equal(5))
                 .and(B.greaterThan(8))
                 .getSQL();

String sql2 = DSL.using(SQLDialect.MYSQL)  
                 .insertInto(MY_TABLE)
                 .values(A, 1)
                 .values(B, 2)
                 .getSQL();

String sql3 = DSL.using(SQLDialect.MYSQL)  
                 .update(MY_TABLE)
                 .set(A, 1)
                 .set(B, 2)
                 .where(C.greaterThan(5))
                 .getSQL();

এসকিউএল স্ট্রিংটি পাওয়ার পরিবর্তে, আপনি জুকিউকিউ ব্যবহার করে এটি সম্পাদন করতে পারেন। দেখা

http://www.jooq.org

(অস্বীকৃতি: আমি JOOQ এর পিছনে সংস্থার পক্ষে কাজ করি)


আপনি কি "5", "8" ইত্যাদির জন্য বিভিন্ন ভ্যালু দিয়ে dbms এর আগেই বিবৃতিটি পার্স করতে না পারায় এটি অনেক ক্ষেত্রেই একটি দুর্বল সমাধান হতে পারে না? আমার ধারণা জুকের সাথে মৃত্যুদন্ড কার্যকর করা কি এর সমাধান করবে?
Vegard

@ ওয়েগার্ড: JOOQ এর এসকিউএল আউটপুটে কীভাবে বাঁধার মানগুলি রেন্ডার করতে পারে তার উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে : jooq.org/doc/3.1/manual/sql-building/bind-values । অন্য কথায়, আপনি রেন্ডার করতে হবে "?"বা বাইন্ডের মানগুলিকে ইনলাইন করতে হবে কিনা তা চয়ন করতে পারেন।
লুকাশ এডার

হ্যাঁ, তবে এসকিউএল তৈরির পরিষ্কার উপায়গুলির বিষয়ে, আপনি যদি জিকিউইকে কার্যকর করতে না ব্যবহার করেন তবে এটি আমার চোখে কিছুটা অগোছালো কোড হবে। এই উদাহরণে আপনি A থেকে 1, B থেকে 2 ইত্যাদি সেট করেছেন তবে আপনি JOOQ দিয়ে এক্সিকিউট না করা হলে এক্সিকিউট করার সময় আপনাকে আরও একবার এটি করতে হবে।
Vegard

1
@ ওয়েগার্ড: কিছুই আপনাকে জাওকিউ এপিআইতে ভেরিয়েবল পাস করতে এবং এসকিউএল বিবৃতি পুনর্নির্মাণ থেকে বিরত রাখে না। এছাড়াও, আপনি ব্যবহার তাদের অনুক্রমে বেঁধে মান নিষ্কাশন করতে পারেন jooq.org/javadoc/latest/org/jooq/Query.html#getBindValues () ব্যবহার করে তাদের নাম দ্বারা, অথবা নামক বেঁধে মান jooq.org/javadoc/latest/org/jooq /Query.html#getParams () । আমার উত্তরটিতে খুব সরল উদাহরণ রয়েছে ... আমি নিশ্চিত নই যে এটি আপনার উদ্বেগের জবাব দেয় কিনা?
লুকাশ এডার

2
এটি একটি ব্যয়বহুল সমাধান।
নির্বাচক

15

আপনার যে প্রযুক্তিটি বিবেচনা করা উচিত তা হ'ল এসকিউএলজে - সরাসরি জাভায় এসকিউএল স্টেটমেন্ট এম্বেড করার একটি উপায়। একটি সাধারণ উদাহরণ হিসাবে, আপনার কাছে টেস্টকুইজরি.সেক্লিজ নামে একটি ফাইল থাকতে পারে:

public class TestQueries
{
    public String getUsername(int id)
    {
        String username;
        #sql
        {
            select username into :username
            from users
            where pkey = :id
        };
        return username;
    }
}

একটি অতিরিক্ত পূর্ববর্তী পদক্ষেপ রয়েছে যা আপনার .sqlj ফাইলগুলিকে নিয়ে যায় এবং সেগুলিকে খাঁটি জাভাতে অনুবাদ করে - সংক্ষেপে, এটি বিশেষ ব্লকগুলির সাথে ডিলিমেটেড অনুসন্ধান করে

#sql
{
    ...
}

এবং এগুলিকে জেডিবিসি কলগুলিতে পরিণত করে। এসকিউএলজে ব্যবহার করার জন্য বেশ কয়েকটি মূল সুবিধা রয়েছে:

  • জেডিবিসি স্তরটিকে সম্পূর্ণ বিমূর্ত করে তোলে - প্রোগ্রামারদের কেবল জাভা এবং এসকিউএল সম্পর্কে চিন্তা করা প্রয়োজন
  • সংকলন সময়ে অনুবাদককে সিনট্যাক্স ইত্যাদির জন্য আপনার প্রশ্নগুলি পরীক্ষা করার জন্য তৈরি করা যেতে পারে
  • ":" উপসর্গ ব্যবহার করে প্রশ্নগুলিতে সরাসরি জাভা ভেরিয়েবলগুলিকে আবদ্ধ করার ক্ষমতা

বেশিরভাগ প্রধান ডাটাবেস বিক্রেতাদের জন্য অনুবাদকের প্রায়শই বাস্তবায়ন রয়েছে, সুতরাং আপনার যা প্রয়োজন তা সহজেই সন্ধান করতে সক্ষম হবেন।


উইকিপিডিয়া অনুসারে এটি এখন পুরানো।
জিউস

1
লেখার সময় (জানুয়ারী 2016) এসকিউএলজে উইকিপিডিয়ায় কোনও উল্লেখ ছাড়াই "পুরানো" হিসাবে উল্লেখ করা হয়। এটি কি সরকারীভাবে পরিত্যক্ত হয়েছে? যদি তা হয় তবে আমি এই উত্তরের শীর্ষে একটি সতর্কতা রেখে দেব।
অ্যাশলে মেরার

এনবি প্রযুক্তিটি এখনও ওরাকল, 12 সি এর সর্বশেষতম সংস্করণে উদাহরণস্বরূপ সমর্থিত । আমি স্বীকার করব যে এটি সর্বাধিক আধুনিক মান নয়, তবে এটি এখনও কাজ করে এবং এর কিছু সুবিধা রয়েছে (যেমন ডিবি-র বিরুদ্ধে প্রশ্নের সংকলন-সময় যাচাইকরণ) যা অন্যান্য সিস্টেমে উপলব্ধ নয়।
অ্যাশলে মেরার

12

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


9

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

int countOfActorsNamedJoe
    = jdbcTemplate.queryForInt("select count(0) from t_actors where first_name = ?", new Object[]{"Joe"});

এটি যেকোন ধরণের স্ক্যাল এক্সিকিউশন, বিশেষত অনুসন্ধানের জন্য সত্যিই দুর্দান্ত; এটি কোনও সম্পূর্ণ ওআরএমের জটিলতা যুক্ত না করে আপনাকে অবজেক্টগুলিতে ফলাফলের মানচিত্র তৈরি করতে সহায়তা করবে।


আমি কীভাবে বাস্তবায়িত এসকিএল কোয়েরি পেতে পারি? আমি এটি লগ করতে চান।
কোডম্যান্যঘা

5

আমি স্প্রিংয়ের নামযুক্ত জেডিবিসি প্যারামিটারগুলি ব্যবহার করার প্রবণতা রাখি তাই আমি "ব্লাথ থেকে কোলেক্স = ': কিছুটা মূল্য" "এর মতো একটি স্ট্যান্ডার্ড স্ট্রিং লিখতে পারি; আমি মনে করি এটি বেশ পঠনযোগ্য।

বিকল্পটি হ'ল পৃথক .sql ফাইলে স্ট্রিং সরবরাহ করা এবং কোনও ইউটিলিটি পদ্ধতি ব্যবহার করে সামগ্রীগুলি পড়া।

ওহ, স্কুইলে নজর রাখার মতো মূল্যও রয়েছে: https://squill.dev.java.net/docs/tutorial.html


আমি ধরে নিলাম আপনার অর্থ আপনি বীনপ্রপার্টি এসকিএলপিরামিটারসোর্স ব্যবহার করছেন? আমি আপনার সাথে প্রায় একমত, আমি যে ক্লাসটি সবে উল্লেখ করেছি তা কঠোরভাবে মটরশুটি ব্যবহার করার সময় দুর্দান্ত তবে অন্যথায় আমি অবজেক্টগুলি তৈরি করতে কাস্টম প্যারামিটারাইজড রওম্যাপার ব্যবহার করার পরামর্শ দেব।
এস্কো

বেশ না। আপনি নামযুক্ত জেডিবিসি প্যারামিটার সহ যে কোনও স্ক্লালপ্যারামিটার উত্স ব্যবহার করতে পারেন। এটি শিমের জাতের পরিবর্তে একটি মানচিত্র স্কেলপ্যারামিটারসোর্স ব্যবহার করা আমার প্রয়োজনের তুলনায় উপযুক্ত। যেভাবেই হোক, এটি একটি ভাল সমাধান। তবে রো-ম্যাপার্স এসকিউএল ধাঁধাটির অন্য দিকের সাথে মোকাবিলা করে: ফলাফলসেটকে বস্তুতে পরিণত করে।
গ্যারিএফ

4

হাইবারনেটের মতো কোনও ওআরএম ব্যবহারের জন্য আমি সুপারিশগুলিকে দ্বিতীয় করি। তবে, এমন পরিস্থিতি অবশ্যই কার্যকর হয় না, সুতরাং আমি লিখতে সাহায্য করেছি এমন কিছু স্টাফ টাউট করার জন্য এই সুযোগটি নেব: স্ক্যান্ডবিল্ডার "বিল্ডার" স্টাইলটি ব্যবহার করে গতিশীল স্কয়ার বিবৃতি তৈরির জন্য একটি জাভা গ্রন্থাগার। এটি মোটামুটি শক্তিশালী এবং বেশ নমনীয়।


4

আমি একটি জাভা সার্লেট অ্যাপ্লিকেশনটিতে কাজ করছি যা অ্যাডহক রিপোর্টিংয়ের উদ্দেশ্যে খুব গতিশীল এসকিউএল স্টেটমেন্ট তৈরি করতে হবে। অ্যাপ্লিকেশনটির মূল কাজটি হ'ল এইচটিটিপি অনুরোধ পরামিতিগুলির একগুচ্ছ একটি প্রাক কোডড ক্যোয়ারীতে ফিড করা এবং আউটপুটটির একটি সুন্দর বিন্যাসিত টেবিল তৈরি করা। আমি আমার সমস্ত এসকিউএল ক্যোয়ারিগুলি এক্সএমএল ফাইলগুলিতে সঞ্চয় করতে এবং টেবিল বিন্যাসের তথ্যের পাশাপাশি রিপোর্টিং অ্যাপ্লিকেশনে লোড করতে স্প্রিং এমভিসি এবং নির্ভরতা ইনজেকশন ফ্রেমওয়ার্ক ব্যবহার করেছি। অবশেষে, প্রতিবেদনের প্রয়োজনীয়তা বিদ্যমান প্যারামিটার ম্যাপিং ফ্রেমওয়ার্কগুলির সক্ষমতার চেয়ে জটিল হয়ে ওঠে এবং আমাকে নিজের লেখাতে হয়েছিল। এটি বিকাশের একটি আকর্ষণীয় অনুশীলন এবং প্যারামিটার ম্যাপিংয়ের জন্য একটি কাঠামো তৈরি করেছিল যা আমি খুঁজে পেতে পারি তার চেয়ে অনেক বেশি শক্তিশালী।

নতুন প্যারামিটার ম্যাপিংগুলি এমন দেখাচ্ছে:

select app.name as "App", 
       ${optional(" app.owner as "Owner", "):showOwner}
       sv.name as "Server", sum(act.trans_ct) as "Trans"
  from activity_records act, servers sv, applications app
 where act.server_id = sv.id
   and act.app_id = app.id
   and sv.id = ${integer(0,50):serverId}
   and app.id in ${integerList(50):appId}
 group by app.name, ${optional(" app.owner, "):showOwner} sv.name
 order by app.name, sv.name

ফলস্বরূপ কাঠামোর সৌন্দর্য হ'ল এটি সঠিক টাইপ চেকিং এবং সীমাবদ্ধ পরীক্ষার সাহায্যে সরাসরি ক্যোয়ারিতে HTTP অনুরোধের পরামিতিগুলি প্রক্রিয়া করতে পারে। ইনপুট বৈধতার জন্য কোনও অতিরিক্ত ম্যাপিংয়ের প্রয়োজন নেই। উপরের উদাহরণের ক্যোয়ারিতে, সার্ভারআইড নামের প্যারামিটারটি এটি একটি পূর্ণসংখ্যার সাথে কাস্ট করতে পারে এবং এটি 0-50 এর মধ্যে রয়েছে তা নিশ্চিত করে পরীক্ষা করা হবে। প্যারামিটার অ্যাপ্লিকেশনটি দৈর্ঘ্যের 50 সীমা সহ পূর্ণসংখ্যার অ্যারে হিসাবে প্রক্রিয়া করা হবে Ifউপস্থিত এবং "সত্য" এ সেট করা হয়েছে, উদ্ধৃতিগুলিতে এসকিউএল এর বিটগুলি fieldচ্ছিক ক্ষেত্র ম্যাপিংয়ের জন্য উত্পন্ন প্রশ্নের সাথে যুক্ত করা হবে। ক্ষেত্র আরও প্যারামিটার ম্যাপিং সহ এসকিউএল এর alচ্ছিক বিভাগগুলি সহ আরও বেশ কয়েকটি প্যারামিটার ধরণের ম্যাপিংগুলি উপলভ্য। এটি বিকাশকারীরা যেমন আসতে পারে ততই জটিল ক্যোরি ম্যাপিংয়ের সুযোগ দেয়। এমনকি কোনও প্রদত্ত ক্যোয়ারীর একটি প্রস্তুতিমূলক স্টেটমেন্টের মাধ্যমে চূড়ান্ত ম্যাপিং থাকবে বা কেবল প্রাক-বিল্ট ক্যোয়ারী হিসাবে চালানো হবে কিনা তা নির্ধারণের জন্য এটির প্রতিবেদন কনফিগারেশনে নিয়ন্ত্রণ রয়েছে।

এইচটিটিপি অনুরোধের মানগুলির নমুনার জন্য:

showOwner: true
serverId: 20
appId: 1,2,3,5,7,11,13

এটি নিম্নলিখিত এসকিউএল উত্পাদন করবে:

select app.name as "App", 
       app.owner as "Owner", 
       sv.name as "Server", sum(act.trans_ct) as "Trans"
  from activity_records act, servers sv, applications app
 where act.server_id = sv.id
   and act.app_id = app.id
   and sv.id = 20
   and app.id in (1,2,3,5,7,11,13)
 group by app.name,  app.owner,  sv.name
 order by app.name, sv.name

আমি সত্যিই মনে করি যে স্প্রিং বা হাইবারনেট বা frame ফ্রেমওয়ার্কগুলির মধ্যে একটিতে আরও শক্তিশালী ম্যাপিং প্রক্রিয়া দেওয়া উচিত যা প্রকার যাচাই করে, অ্যারে এবং এই জাতীয় বৈশিষ্ট্যগুলির মতো জটিল ডেটা ধরণের জন্য মঞ্জুরি দেয়। আমি কেবল আমার উদ্দেশ্যে আমার ইঞ্জিনটি লিখেছি, এটি সাধারণ মুক্তির জন্য খুব বেশি পড়া হয়নি। এটি এই মুহুর্তে কেবল ওরাকল প্রশ্নের সাথে কাজ করে এবং কোডটির সবকটি একটি বড় কর্পোরেশনের অন্তর্ভুক্ত। কোনও দিন আমি আমার ধারণাগুলি গ্রহণ করতে এবং একটি নতুন ওপেন সোর্স কাঠামো তৈরি করতে পারি, তবে আমি আশা করছি বিদ্যমান বিদ্যমান খেলোয়াড়দের মধ্যে একটি চ্যালেঞ্জ গ্রহণ করবে।


3

আপনি কেন হাতে সমস্ত স্ক্যুয়াল তৈরি করতে চান? আপনি কি হাইবারনেটের মতো কোনও ওআরএমের দিকে নজর রেখেছেন আপনার প্রকল্পের উপর নির্ভর করে এটি সম্ভবত আপনার যা প্রয়োজন তার কমপক্ষে 95% করবে, এটি একটি পরিষ্কার উপায়ে করুন কাঁচা এসকিউএল, এবং যদি আপনাকে শেষ বিট পারফর্মেন্সের প্রয়োজন হয় তবে আপনি তৈরি করতে পারেন এসকিউএল কোয়েরিগুলির যেগুলি হ্যান্ড টিউন করা দরকার।


3

আপনি মাইবাটিস ( www.mybatis.org ) এ একবার দেখতে পারেন । এটি আপনাকে আপনার জাভা কোডের বাইরে এসকিউএল স্টেটমেন্ট লিখতে সহায়তা করে এবং অন্যান্য জিনিসগুলির মধ্যে আপনার জাভা অবজেক্টগুলিতে এসকিউএল ফলাফল ম্যাপ করে।


3

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

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List<User> getAll();

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND "
           + "last_name LIKE :last LIMIT 1")
    User findByName(String first, String last);

    @Insert
    void insertAll(User... users);

    @Delete
    void delete(User user);
}

গ্রন্থাগারের জন্য অফিসিয়াল ডক্সে আরও উদাহরণ এবং আরও ভাল ডকুমেন্টেশন রয়েছে।

মেন্টাবিয়ান নামে একটি রয়েছে যা একটি জাভা ওআরএম । এটিতে দুর্দান্ত বৈশিষ্ট্য রয়েছে এবং এসকিউএল লেখার সহজ উপায় বলে মনে হয়।


অনুযায়ী রুম ডকুমেন্টেশন : Room provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite। সুতরাং, এটি আরডিবিএমএসের জন্য জেনেরিক ORM গ্রন্থাগার নয়। এটি মূলত অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির জন্য বোঝানো হয়েছে।
রফিআলহামাদ

2

একটি এক্সএমএল ফাইল পড়ুন।

আপনি এটি একটি এক্সএমএল ফাইল থেকে পড়তে পারেন। এটি বজায় রাখা এবং সাথে কাজ করা সহজ। জাভাতে কোডের কয়েকটি লাইন তৈরি করতে সেখানে স্ট্যান্ডার্ড স্ট্যাক্স, ডম, স্যাক্স পার্সার রয়েছে।

গুণাবলী সঙ্গে আরও করুন

এসকিউএল দিয়ে আরও কিছু করতে সহায়তা করার জন্য আপনার ট্যাগটিতে বৈশিষ্ট্যগুলি সহ কিছু শব্দার্থক তথ্য থাকতে পারে। এটি পদ্ধতির নাম বা ক্যোয়ারির ধরণ বা এমন কিছু হতে পারে যা আপনাকে কম কোড করতে সহায়তা করে।

Maintaince

আপনি জারটির বাইরে এক্সএমএল রেখে সহজেই এটি বজায় রাখতে পারেন। একটি সম্পত্তি ফাইল হিসাবে একই সুবিধা।

রূপান্তর

এক্সএমএল এক্সটেনসেবল এবং সহজেই অন্যান্য ফর্ম্যাটে রূপান্তরযোগ্য।

ব্যবহারের ক্ষেত্রে

মেটামুগ এসকিউএল সহ REST রিসোর্স ফাইলগুলি কনফিগার করতে এক্সএমএল ব্যবহার করে।


আপনি পছন্দ মতো yaml বা json ব্যবহার করতে পারেন। তারা একটি প্লেইন বৈশিষ্ট্য ফাইলে সংরক্ষণ চেয়ে ভাল
নির্বাচক

প্রশ্নটি কীভাবে এসকিউএল তৈরি করতে হয়। এসকিউএল তৈরি করতে আপনার যদি প্রয়োজন হয় এক্সএমএল, পার্সার, বৈধকরণ ইত্যাদি over এসকিউএল তৈরির জন্য এক্সএমএল জড়িত বেশিরভাগ প্রারম্ভিক প্রয়াসকে টীকা দেওয়ার পক্ষে সরিয়ে দেওয়া হচ্ছে। গৃহীত উত্তর দ্বারা পাযত্র Kochański হয় সহজ এবং মার্জিত এবং বিন্দু - সমস্যা ও রক্ষণীয় solves। দ্রষ্টব্য: আলাদা ভাষায় আরও ভাল এসকিউএল বজায় রাখার বিকল্প উপায় নেই।
রফিআলহামাদ

আমি আমার আগের মন্তব্যটি মুছলাম I don't see a reason to make use of XML. , কারণ আমি এটি সম্পাদনা করতে পারি নি।
রফিআলহামাদ

1

আপনি যদি কোনও বৈশিষ্ট্য ফাইলে এসকিউএল স্ট্রিংগুলি রাখেন এবং তারপরে পড়েন তবে আপনি এসকিউএল স্ট্রিংগুলি একটি সরল পাঠ্য ফাইলে রাখতে পারেন।

এটি এসকিউএল টাইপ সমস্যাগুলি সমাধান করে না, তবে কমপক্ষে এটি টোড বা স্ক্যালপ্লাস থেকে অনুলিপি করা এবং আটকানো সহজ করে তোলে।


0

আপনি কীভাবে স্ট্রিং সংক্ষেপণ পেতে পারেন, প্রস্তুতিমূলক স্ট্যাটামেন্টের দীর্ঘ এসকিউএল স্ট্রিংগুলি বাদ দিয়ে (যে আপনি সহজেই কোনও টেক্সট ফাইলে সরবরাহ করতে পারেন এবং যে কোনও উপায়ে কোনও উত্স হিসাবে লোড করতে পারেন) আপনি বিভিন্ন লাইনে বিচ্ছিন্ন হয়ে পড়েছেন?

আপনি সরাসরি এসকিউএল স্ট্রিং তৈরি করছেন না? এটিই প্রোগ্রামিংয়ে সবচেয়ে বড় নো। দয়া করে প্রস্তুত প্রস্তুতিগুলি ব্যবহার করুন এবং প্যারামিটার হিসাবে ডেটা সরবরাহ করুন। এটি এসকিউএল ইঞ্জেকশনের সম্ভাবনা ব্যাপকভাবে হ্রাস করে।


তবে আপনি যদি কোনও ওয়েব পৃষ্ঠা জনগণের সামনে প্রকাশ না করে থাকেন - এসকিউএল ইনজেকশন কি কোনও প্রাসঙ্গিক বিষয়?
বিদার

4
এসকিউএল ইঞ্জেকশন সর্বদা প্রাসঙ্গিক, কারণ এটি দুর্ঘটনাক্রমে পাশাপাশি উদ্দেশ্য হিসাবেও ঘটতে পারে।
স্লেস্কে

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

4
এমনকি একটি স্ট্রিড থেকে একটি প্রস্তুতিমূলক স্টেটমেন্ট তৈরি করা দরকার, না?
স্টুয়ার্ট

হ্যাঁ, তবে আপনি যতক্ষণ না কোনও নিরাপদ প্রস্তুতিমূলক স্টেটমেন্ট তৈরি করেন ততক্ষণ স্ট্রিং থেকে একটি প্রস্তুতিমূলক স্টেটমেন্ট তৈরি করা নিরাপদ। এগুলি উত্পন্ন করার জন্য, যুক্তিযুক্ত বিষয়গুলির গণ্ডগোলটি গোপন করার জন্য আপনার সম্ভবত একটি প্রস্তুতিমূলক স্ট্যান্ডমেন্ট বিল্ডার ক্লাস লেখা উচিত।
জিবিবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.