परिचय
CREATE TABLE tab1(i INTEGER, j INTEGER, t TEXT);
तो मैं निम्नलिखित किया
यह एंड्रॉइड के जावा पर आधारित है और यह आपके एप्लिकेशन प्रशंसकों/ग्राहकों को परेशान किए बिना डेटाबेस को बदलने पर एक अच्छा उदाहरण है। यह SQLite FAQ पृष्ठ के विचार पर आधारित है http://sqlite.org/faq.html#q11
समस्या
मैं नोटिस नहीं था कि मैं एक रसीद में एक भी खरीदे गए आइटम को हटाने के लिए एक ROW_NUMBER या record_id निर्धारित करने की आवश्यकता है कि, और कम से उसी समय आइटम बारकोड नंबर ने मुझे उस आइटम को हटाने की कुंजी के रूप में बनाने की सोच में बेवकूफ़ बना दिया। मैं तालिका रसीद_बारकोड में रसीद विवरण सहेज रहा हूं। रिकॉर्ड_आईड के बिना इसे छोड़कर मतलब एक ही आइटम के सभी रिकॉर्ड्स को रसीद में हटाया जा सकता है अगर मैंने आइटम बारकोड को कुंजी के रूप में इस्तेमाल किया।
सूचना
कृपया समझते हैं कि यह मेरा कोड की एक कॉपी-पेस्ट मैं इस लेखन के समय पर काम कर रहा हूँ है। इसे केवल एक उदाहरण के रूप में उपयोग करें, कॉपी-पेस्टिंग यादृच्छिक रूप से आपकी सहायता नहीं करेगा। इसे अपनी आवश्यकताओं के अनुसार पहले संशोधित करें
भी कोड में टिप्पणियां पढ़ने के लिए मत भूलना।
कोड
अपनी कक्षा में एक विधि के रूप में इस का प्रयोग करें 1 स्तंभ आप जोड़ना चाहते हैं याद आ रही है कि क्या जांच करने के लिए। हम टेबल रसीद_बारकोड को बदलने की प्रक्रिया को दोहराने के लिए ऐसा नहीं करते हैं। बस अपनी कक्षा के हिस्से के रूप में इसका जिक्र करें। अगले चरण में आप देखेंगे कि हम इसका उपयोग कैसे करेंगे।
public boolean is_column_exists(SQLiteDatabase mDatabase , String table_name,
String column_name) {
//checks if table_name has column_name
Cursor cursor = mDatabase.rawQuery("pragma table_info("+table_name+")",null);
while (cursor.moveToNext()){
if (cursor.getString(cursor.getColumnIndex("name")).equalsIgnoreCase(column_name)) return true;
}
return false;
}
फिर, निम्नलिखित कोड तालिका receipt_barcode बनाने के लिए अगर यह पहले से आपका ऐप्लिकेशन के 1 समय उपयोगकर्ताओं के लिए नहीं बाहर निकलें करता है प्रयोग किया जाता है। और कृपया कोड में "अगर नहीं है" नोटिस करें। यह महत्व है।
//mDatabase should be defined as a Class member (global variable)
//for ease of access :
//SQLiteDatabse mDatabase=SQLiteDatabase.openOrCreateDatabase(dbfile_path, null);
creation_query = " CREATE TABLE if not exists receipt_barcode (";
creation_query += "\n record_id INTEGER PRIMARY KEY AUTOINCREMENT,";
creation_query += "\n rcpt_id INT(11) NOT NULL,";
creation_query += "\n barcode VARCHAR(255) NOT NULL ,";
creation_query += "\n barcode_price VARCHAR(255) DEFAULT (0),";
creation_query += "\n PRIMARY KEY (record_id));";
mDatabase.execSQL(creation_query);
//This is where the important part comes in regarding the question in this page:
//adding the missing primary key record_id in table receipt_barcode for older versions
if (!is_column_exists(mDatabase, "receipt_barcode","record_id")){
mDatabase.beginTransaction();
try{
Log.e("record_id", "creating");
creation_query="CREATE TEMPORARY TABLE t1_backup(";
creation_query+="record_id INTEGER PRIMARY KEY AUTOINCREMENT,";
creation_query+="rcpt_id INT(11) NOT NULL,";
creation_query+="barcode VARCHAR(255) NOT NULL ,";
creation_query+="barcode_price VARCHAR(255) NOT NULL DEFAULT (0));";
mDatabase.execSQL(creation_query);
creation_query="INSERT INTO t1_backup(rcpt_id,barcode,barcode_price) SELECT rcpt_id,barcode,barcode_price FROM receipt_barcode;";
mDatabase.execSQL(creation_query);
creation_query="DROP TABLE receipt_barcode;";
mDatabase.execSQL(creation_query);
creation_query="CREATE TABLE receipt_barcode (";
creation_query+="record_id INTEGER PRIMARY KEY AUTOINCREMENT,";
creation_query+="rcpt_id INT(11) NOT NULL,";
creation_query+="barcode VARCHAR(255) NOT NULL ,";
creation_query+="barcode_price VARCHAR(255) NOT NULL DEFAULT (0));";
mDatabase.execSQL(creation_query);
creation_query="INSERT INTO receipt_barcode(record_id,rcpt_id,barcode,barcode_price) SELECT record_id,rcpt_id,barcode,barcode_price FROM t1_backup;";
mDatabase.execSQL(creation_query);
creation_query="DROP TABLE t1_backup;";
mDatabase.execSQL(creation_query);
mdb.setTransactionSuccessful();
} catch (Exception exception){
Log.e("table receipt_bracode", "Table receipt_barcode did not get a primary key (record_id");
exception.printStackTrace();
} finally {
mDatabase.endTransaction();
}
आप डेटाबेस संपादित करने के लिए किसी भी डीबी ब्राउज़र का उपयोग कर सकते हैं। वे टेबल को हटा रहे हैं और बना रहे हैं। लेकिन हम इसके बारे में परेशान नहीं करना चाहते हैं। आप यहां से किसी भी ओएस के लिए डीबी ब्राउज़र डाउनलोड कर सकते हैं http://sqlitebrowser.org/ – vichu