मैं एंड्रॉइड और उसके डेटाबेस एपीआई से परिचित होने की कोशिश कर रहा हूं। मैं एक वर्ग कि SQLiteOpenHelper से विरासत बना लिया है और इस मैं कैसे डेटाबेसSQLiteDatabase.insertOrThrow फेंक नहीं है लेकिन डेटा डाला नहीं गया है
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL("CREATE TABLE " + FUELS_TABLE_NAME + " ("
+ "_ID INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "DATE_OF_FUELS DATE DEFAULT CURRENT_TIME,"
+ "SELLER_POSITION TEXT DEFAULT 'unknown',"
+ "AMOUNT REAL"
+ ");"
);
} catch (SQLException e) {
Log.e(DATABASE_NAME, e.toString());
}
}
डीबी के लिए डेटा जोड़ने के लिए इस्तेमाल किया समारोह में तालिका बनाने है भीतर implemeneted निम्नलिखित एक ही कक्षा
हैpublic void addNewFuel(float amount) {
// Create the content to insert into the database
ContentValues newEntry = new ContentValues();
newEntry.put("amount", amount);
// Get database handler
try {
db = getWritableDatabase();
} catch (SQLException e) {
Log.e(DATABASE_NAME, e.toString());
return;
}
// Begin transaction and insert data
long returnedValue;
db.beginTransaction();
try {
returnedValue = db.insertOrThrow(FUELS_TABLE_NAME, null, newEntry);
Log.v(DATABASE_NAME, "return value " + returnedValue);
} catch (SQLException e) {
Log.e(DATABASE_NAME, e.toString());
} finally {
db.endTransaction();
}
db.close();
}
लेकिन स्पष्ट रूप से कोई डेटा नहीं जोड़ा गया है। रिटर्न वैल्यू हमेशा होता है 1. विधि फेंक नहीं देती है, और जब मैं डीबी को एडीबी के साथ खींचता हूं और इसकी सामग्री को पूरी तरह खाली करता हूं।
मैं समझ नहीं पा रहा हूं कि मैं क्या खो रहा हूं।
किसी भी सुझाव की सराहना की जाएगी।
धन्यवाद, एस
आपको बहुत बहुत धन्यवाद। अब यह काम कर रहा है। मैं वास्तव में सोच रहा हूं कि कॉल गड़बड़ कैसे करता है, और क्यों सम्मिलित नहीं होता है। वैसे भी, बहुत बहुत धन्यवाद! – emitrax
आपका स्वागत है। मुझे लगता है कि एक अपवाद नहीं फेंक दिया गया है क्योंकि आपके सम्मिलन कथन के साथ विशेष रूप से कुछ भी गलत नहीं है, और आप किसी भी तालिका की बाधाओं का उल्लंघन नहीं कर रहे हैं। इसके बजाय कई लेन-देन कॉल में चीजें मिश्रित हो रही हैं। मुझे यह देखने के लिए कुछ और शोध करना होगा कि नेस्टेड लेनदेन इस तरह से व्यवहार क्यों करता है। मैं समझता हूं कि यह कुछ भी क्यों नहीं डालेगा, लेकिन तथ्य यह है कि एक आईडी वापस लौटाई गई है अजीब है। – McStretch
यह वास्तव में अजीब है! SQLiteOpenHelper के लिए स्रोत कोड निश्चित रूप से डेटाबेस निर्माण और अद्यतन को छोड़कर किसी भी लेनदेन को नहीं खोलता है। तो getWriteableDatabase() कॉल रिटर्न के बाद, डेटाबेस के लिए कोई लेनदेन सक्रिय नहीं है! या तो कुछ वास्तव में खराब है, या यह जवाब फर्जी है। – Nakedible