অ্যান্ড্রয়েড রুম - লাইক সহ কোয়েরি নির্বাচন করুন


108

আমি এমন সমস্ত বস্তুর সন্ধানের জন্য একটি কোয়েরি করার চেষ্টা করছি যার নামটিতে পাঠ্য রয়েছে:

@Query("SELECT * FROM hamster WHERE name LIKE %:arg0%")
fun loadHamsters(search: String?): Flowable<List<Hamster>>

বার্তা:

Error:no viable alternative at input 'SELECT * FROM hamster WHERE name LIKE %'
Error:There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (near "%": syntax error)
Error:Unused parameter: arg0

এছাড়াও আমি চেষ্টা করছি:

@Query("SELECT * FROM hamster WHERE name LIKE '%:arg0%'")
fun loadHamsters(search: String?): Flowable<List<Hamster>>

বার্তা:

Error:Unused parameter: arg0

কিভাবে এটি ঠিক করবেন?

উত্তর:


151

%আপনার ইনপুট ক্যোয়ারিতে অক্ষরগুলি আবদ্ধ করা উচিত - কোয়েরিতে নিজেই নয়।

যেমন এটি চেষ্টা করুন:

@Query("SELECT * FROM hamster WHERE name LIKE :arg0")
fun loadHamsters(search: String?): Flowable<List<Hamster>>

তারপরে আপনার String searchমানটি দেখতে হবে:

search = "%fido%";
loadHamsters(search);

তদতিরিক্ত, বাইন্ডিং প্যারামিটারের নামটি ভেরিয়েবল নামের সাথে মিলে যাওয়া উচিত, এর চেয়ে arg0এটি দেখতে ভাল হওয়া উচিত:

@Query("SELECT * FROM hamster WHERE name LIKE :search")
fun loadHamsters(search: String?): Flowable<List<Hamster>>

5
নোট করুন যে বর্তমানে কোটলিনের
কিরিল

@KirillRakhman কিন্তু এই পদ্ধতি এখনও কাজ করে জরিমানা ;-) stackoverflow.com/a/44448566/6674369
আন্দ্রেই Antonov

@ অ্যান্ড্রিআন্টনভ কোটলিন বাগটি 9 মাস আগে ঠিক করা হয়েছিল
কিরিল

330

আপনি কেবল এসকিউএলাইট স্ট্রিং সংক্ষেপণ ব্যবহার করে কনক্যাট করতে পারেন।

@Query("SELECT * FROM hamster WHERE name LIKE '%' || :search || '%'")
fun loadHamsters(search: String?): Flowable<List<Hamster>>

4
এমনকি কোটলিন বাগ সহও কাজ করুন: youtrack.jetbrains.com/issue/KT-17959
আন্তোনভ

8
এই পদ্ধতির আসলে প্রশ্নটি যা জিজ্ঞাসা করছিল। যদিও অন্য উত্তরটিও বেশ ভাল।
xarlymg89

আমি বুঝতে পারছি '%'কিন্তু কেউ কি ব্যাখ্যা করতে পারবেন কি '||'এবং কেন?
আলী কাজী

18
||স্ট্রিং কনটেনেট অপারেটর। এটি +জাভা স্ট্রিংয়ের মতো ভাবেন ।
সানলোক লি

ভয়ঙ্কর উত্তর। আপনাকে অনেক অনেক ধন্যবাদ.
রেজা_খালাফি

0

ঘরটি কেবলমাত্র বাঁধাই প্যারামিটার সমর্থন করে : পদ্ধতি পরামিতি এবং কোয়েরি বাইন্ড পরামিতিগুলির মধ্যে কোনও বিভ্রান্তি এড়াতে নাম

ঘর স্বয়ংক্রিয়ভাবে পদ্ধতিটির পরামিতিগুলিকে আবদ্ধ আর্গুমেন্টে আবদ্ধ করবে। এটি পরামিতিগুলির নামের সাথে যুক্ত আর্গুমেন্টের নামের সাথে মিলে যায়।

 @Query("SELECT * FROM user WHERE user_name LIKE :name AND last_name LIKE :last")
 public abstract List<User> findUsersByNameAndLastName(String name, String last);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.