2011-07-03 12 views
6

मेरे पास निम्न कोड है जो मेरी तालिका बनाता है। मैं इस पर डेटा सम्मिलित है कि इसएसक्यूएल क्वेरी एंड्रॉइड के साथ समस्या जहां क्लॉज

_id  date  recordName  total 
-------------------------------------- 
7  2011  TestMaxRecord  5 

जावा कोड की तरह दिखता है:

public static final String KEY_ROWID = "_id"; 
public static final String KEY_DATE = "date"; 
public static final String KEY_TOTAL = "total"; 
public static final String KEY_RECORD_NAME = "recordName"; 

private static final String DATABASE_CREATE_RECORDS = "create table " + DATABASE_TABLE_RECORDS + " (" 
+ KEY_ROWID + " integer primary key autoincrement, " 
+ KEY_DATE + " text not null, " 
+ KEY_RECORD_NAME + " text not null, " 
+ KEY_TOTAL + " text not null);"; 

public Cursor getRecord(String name) throws SQLException { 
    return mDb.query(true, DATABASE_TABLE_RECORDS, new String[] {KEY_ROWID, KEY_DATE, KEY_RECORD_NAME, KEY_TOTAL}, KEY_RECORD_NAME + " = " + name, null, null, null, null, null); 
} 

यह हर बार एक अपवाद फेंकता है जहां नाम = "TestMaxRecord" (के बावजूद वहाँ में डेटा जा रहा है) निम्न त्रुटि के साथ

android.database.sqlite.SQLiteException: ऐसी कोई स्तंभ: TestMaxRecord: है, जबकि संकलन: का चयन करें DISTINCT _ id, तिथि, recordName, कुल रिकॉर्ड से कहां recordName = TestMaxRecord

जो मुझे लगता है कि यह कॉलम शीर्षक TestMaxRecord की तलाश में है। मैं एक एंड्रॉइड नौसिखिया हूं लेकिन इस भाग को एक उदाहरण से बिल्कुल काफी कॉपी किया है (हालांकि यह int का उपयोग कर रहा था)। क्या आपकी क्वेरी पर int और स्ट्रिंग्स का उपयोग करने में कोई अंतर है?

उत्तर

11

आपको मूल्य के चारों ओर सिंगल कोट्स डालने की ज़रूरत है, अन्यथा यह इसे कॉलम के रूप में पेश करेगा।

KEY_RECORD_NAME + " = '" + name + "'" 

नोट: हाँ

public Cursor getRecord(String name) throws SQLException { 
    return mDb.query(true, 
    DATABASE_TABLE_RECORDS, 
    new String[] {KEY_ROWID, KEY_DATE, KEY_RECORD_NAME, KEY_TOTAL}, 
    KEY_RECORD_NAME + " = ?", 
    new String[] {name}, 
    null, null, null, null); 
} 

वैकल्पिक रूप से, SQLiteQueryBuilder

+0

पर गौर है कि काम: यह समाधान, आप पैरामीटर प्लेसहोल्डर का उपयोग करना चाहिए, और selectionArgs तर्क के माध्यम से मान पास एसक्यूएल इंजेक्शन के लिए खुला है , धन्यवाद। क्या ऐसा इसलिए है क्योंकि यह एक स्ट्रिंग है? मैंने पहले आपके लिंक में संसाधनों को देखा है और यह WHERE खंडों में सहायता नहीं करता है। जहां खंड में बहुत कम तार ... कम से कम मुझे कभी मिला है। – easycheese

संबंधित मुद्दे