ভূমিকা
এটি অ্যান্ড্রয়েড জাভা ভিত্তিক এবং এটি আপনার অ্যাপ্লিকেশন ভক্ত / গ্রাহকদের বিরক্ত না করে ডাটাবেস পরিবর্তন করার পক্ষে একটি ভাল উদাহরণ। এটি এসকিউএল এফএকিউ পৃষ্ঠা http://sqlite.org/faq.html#q11 এর ধারণার উপর ভিত্তি করে
সমস্যাটি
আমি খেয়াল করিনি যে আমার কোনও রশিদে একটি ক্রয়কৃত আইটেম মুছতে একটি সারি_নম্বার বা রেকর্ড_আইড সেট করা দরকার এবং একই সাথে আইটেমটির বারকোড নম্বরটি আইটেমটি মুছে ফেলার কী হিসাবে তৈরি করার ভেবে আমাকে বোকা বানিয়েছিল। আমি টেবিল রসিদ_বারকোডে একটি রশিদের বিশদ সংরক্ষণ করছি। এটিকে রেকর্ড_আইডি ছাড়াই বোঝা যাচ্ছে যদি আমি আইটেমটি বারকোডটি কী হিসাবে ব্যবহার করি তবে কোনও রশিদে একই আইটেমের সমস্ত রেকর্ড মুছতে পারে।
নোটিশ
দয়া করে বুঝতে পারেন যে এটি আমার কোডটির একটি অনুলিপি-পেস্ট আমি এই লেখার সময় কাজ করছি। এটি কেবল উদাহরণ হিসাবে ব্যবহার করুন, এলোমেলোভাবে অনুলিপি-অনুলিপি আপনাকে সাহায্য করবে না। আপনার প্রয়োজনে এটি প্রথমে সংশোধন করুন
এছাড়াও দয়া করে কোডটিতে মন্তব্যগুলি পড়তে ভুলবেন না।
কোড
আপনি যে কলামটি যুক্ত করতে চান তা অনুপস্থিত আছে কি না তা পরীক্ষা করার জন্য এটি 1 ম ক্লাসে একটি পদ্ধতি হিসাবে ব্যবহার করুন। আমরা কেবল টেবিলের রসিদ_বারকোড পরিবর্তনের প্রক্রিয়া পুনরাবৃত্তি না করার জন্য এটি করি। আপনার ক্লাসের অংশ হিসাবে এটি উল্লেখ করুন। পরবর্তী পদক্ষেপে আপনি দেখতে পাবেন আমরা কীভাবে এটি ব্যবহার করব।
public boolean is_column_exists(SQLiteDatabase mDatabase , String table_name,
String 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;
}
তারপরে, নীচের কোডটি যদি আপনার অ্যাপ্লিকেশনটির প্রথমবারের ব্যবহারকারীদের জন্য ইতিমধ্যে প্রস্থান না হয় তবে সারণি রসিদ_বারকোড তৈরি করতে ব্যবহৃত হয় । এবং দয়া করে কোডটিতে "যদি উপস্থিত না থাকে" লক্ষ্য করুন। এর গুরুত্ব আছে।
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);
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();
}