এক্সিকিউটকিউরি () দিয়ে ডেটা ম্যানিপুলেশন স্টেটমেন্ট জারি করতে পারে না


100

মাইএসকিউএলে আমার দুটি টেবিল রয়েছে tableAএবং tableB। আমি দুটি জিজ্ঞাসা কার্যকর করার চেষ্টা করছি:

executeQuery(query1) 
executeQuery(query2)

তবে আমি নিম্নলিখিত ত্রুটি পেয়েছি:

can not issue data manipulation statements with executeQuery().

এটার মানে কি?


জেডিবিসি - মাইএসকিউএল প্রশাসকের মাধ্যমে অন্য কোনও মাইএসকিউএল-এ আপনার অ্যাক্সেস রয়েছে কি? নাকি কমান্ড লাইন?
ওএমজি পনিস

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

জেডিবিসি-র মাধ্যমে ডাটাবেস তৈরি করতে স্ক্রিপ্টগুলিতে সূচীকরণের অন্তর্ভুক্ত করা ভাল, সম্ভবত আপনি যদি ইতিমধ্যে সেগুলি ব্যবহার করতে পারতেন।
ওএমজি পনিস

উত্তর:


190

ডেটা ম্যানিপুলেট করার জন্য আপনার আসলে executeUpdate()পরিবর্তে প্রয়োজন executeQuery()

executeUpdate()জাভাডোক থেকে এখানে একটি নিষ্কাশন যা ইতিমধ্যে এটির নিজস্ব একটি উত্তর:

প্রদত্ত এসকিউএল বিবৃতি কার্যকর করে, যা কোনও INSERT, আপডেট, অথবা বিলোপ বিবরণী বা একটি এসকিউএল বিবৃতি যা কোনও এসকিউএল ডিডিএল বিবৃতি হিসাবে কিছুই দেয় না।


34

ডিএমএল স্টেটমেন্টটি কার্যকর করার সময়, আপনার পরিবর্তে executeUpdate/ ব্যবহার করা উচিত ।executeexecuteQuery

একটি সংক্ষিপ্ত তুলনা এখানে:

এক্সিকিউটিভ কিউরিভিএসেক্সেকিউটআপডেটভিএসেক্সেকিউট


23

আপনি যদি বসন্ত বুট ব্যবহার করছেন তবে কেবল একটি @ মডেফাইং টীকা যুক্ত করুন।

@Modifying
@Query
(value = "UPDATE user SET middleName = 'Mudd' WHERE id = 1", nativeQuery = true)
void updateMiddleName();

4
বসন্ত বুট সংগ্রহস্থলের বিবৃতি মুছে ফেলার জন্য @ লেনদেন সহায়তা করবে
অভিষেক চুদেকার

4
codar.club/blogs/5cd7f06bec80a.html সংশোধন, লেনদেন এবং কোয়েরি টীকাগুলির ব্যবহারের ব্যাখ্যা দেয় explains আমি এই সমস্যাটি ব্যবহার করে সমাধান করেছি: @Modifying(clearAutomatically = true) @Transactional@ মুছা টীকা উপরে আমার মুছে ফেলা ক্যোয়ারী সংজ্ঞায়িত করার ঠিক উপরে
ব্যবহারকারী 666

16

executeUpdate()ডেটা ম্যানিপুলেশন বিবৃতি জারি করতে ব্যবহার করুন । executeQuery()কেবলমাত্র নির্বাচন জিজ্ঞাসার জন্য বোঝানো হয় (অর্থাত্ ফলাফলগুলি যে ফলাফলগুলি দেয় এমন প্রশ্নের)।


16

ক্যোয়ারি মুছে ফেলার জন্য - ব্যবহার করুন @Modifyingএবং পছন্দ মতো এর @Transactionalআগে @Query: -

@Repository
public interface CopyRepository extends JpaRepository<Copy, Integer> {

    @Modifying
    @Transactional
    @Query(value = "DELETE FROM tbl_copy where trade_id = ?1 ; ", nativeQuery = true)
    void deleteCopyByTradeId(Integer id);

}

এটি java.sql.SQLException: Can not issue data manipulation statements with executeQuery()ত্রুটি দেয় না।

সম্পাদনা করুন:

যেহেতু এই উত্তরটি অনেকগুলি উপার্জন পাচ্ছে, তাই আরও বোঝার জন্য আমি আপনাকে ডকুমেন্টেশনগুলিতে উল্লেখ করব।

@ লেনদেন

By default, CRUD methods on repository instances are transactional. For read operations, 
the transaction configuration readOnly flag is set to true. 
All others are configured with a plain @Transactional so that default transaction 
configuration applies.

@ মডিডিং

Indicates a query method should be considered as modifying query as that changes the way 
it needs to be executed. This annotation is only considered if used on query methods defined 
through a Query annotation). It's not applied on custom implementation methods or queries 
derived from the method name as they already have control over the underlying data access 
APIs or specify if they are modifying by their name.

Queries that require a @Modifying annotation include INSERT, UPDATE, DELETE, and DDL 
statements.


4

এই কোডটি আমার পক্ষে কাজ করে: আমি একটি INSERT এর মান নির্ধারণ করি এবং একটি মান নির্বাচন করে এই মানটির LAST_INSERT_ID () পাই; আমি জাভা নেটবিনস 8.1, মাইএসকিউএল এবং জাভা.জেডিবিসি.ড্রাইভার ব্যবহার করি

                try {

        String Query = "INSERT INTO `stock`(`stock`, `min_stock`,   
                `id_stock`) VALUES ("

                + "\"" + p.get_Stock().getStock() + "\", "
                + "\"" + p.get_Stock().getStockMinimo() + "\","
                + "" + "null" + ")";

        Statement st = miConexion.createStatement();
        st.executeUpdate(Query);

        java.sql.ResultSet rs;
        rs = st.executeQuery("Select LAST_INSERT_ID() from stock limit 1");                
        rs.next(); //para posicionar el puntero en la primer fila
        ultimo_id = rs.getInt("LAST_INSERT_ID()");
        } catch (SqlException ex) { ex.printTrace;}

3
@Modifying
@Transactional
@Query(value = "delete from cart_item where cart_cart_id=:cart", nativeQuery = true)
public void deleteByCart(@Param("cart") int cart); 

@ ক্যোয়ারির আগে @ মোডিফাইং এবং @ ট্রান্সন্যাশনাল যুক্ত করতে ভুলবেন না। এটা আমার জন্য কাজ করে.

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


3

executeQuery()ফেরত a ResultSet। আমি জাভা / মাইএসকিউএল এর সাথে তেমন পরিচিত নই, তবে সূচকগুলি তৈরি করতে আপনি সম্ভবত একটি চান executeUpdate()


4
এটি একটি আশা করে না ResultSet। এটা তোলে পরিবর্তে ফেরৎ একটি ResultSet
বালাসসি

4
এটি ডিবি থেকে ফলাফল নির্ধারণের প্রত্যাশা করে যা আমি বলতে চাইছি।
নিল এন

-1

প্রথম বন্ধনীগুলিতে এক্সিকিউটআপডেট () ছাড়াও, এসকিউএল স্টেটমেন্ট ব্যবহার করতে আপনাকে অবশ্যই একটি ভেরিয়েবল যুক্ত করতে হবে।

উদাহরণ স্বরূপ:

PreparedStatement pst =  connection.prepareStatement(sql);
int numRowsChanged = pst.executeUpdate(sql);

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