بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

درج اطلاعات تکراری در دیتابیس

مدیریت گفتگو
محمدی 12 سال پیش
آخرین تغییر: 11 سال پیش

سلام 

مشکلی که دارم اینه که به ازای هر بار که برنامه رو ران می کنم اطلاعات دیتا بیسم دوباره درج میشه؛ یعنی اگه دفعه اول 3 ردیف اطلاعات دارم ؛ دفعه دوم میشه 4 تا !!!!!

ممنون میشم کمکم کنید!

نظرات

یزدانی 12 سال پیش
کد php و کد برنامه رو بنویسید تا بشه کمک کرد !
JSONObject 12 سال پیش
خب لابد یه خط کد insert تو برنامه داری که با هر بار اجرا کار خودشو میکنه دیگه

پاسخ‌ها 4

محمدی 12 سال پیش

من همون کدی که استاد توی آموزش قسمت 14ام گذاشتن رو نوشتم ؛ استاد خودشون برای جلوگیری از درج شدن تکراری اطلاعات به صورت کامنت کردن.

اما من می خوام مجبور نشم اطلاعاتمو به صورت کامنت کنم ؛ با php ننوشتم! 

نظرات

وجود اطلاعات رو تو دیتابیس قبل از insert بررسی کنید که اطلاعات تکراری ثبت نشه، بار اول هم ثبت اطلاعات رو داشته باشید
Mir Unknown 12 سال پیش
چون از کد استاد استفاده کردن و استاد با کامنت کردن قسمتی از کد از چیزی که ایشون میخوان رسیده پس چ کاریه اون قسمتو حذف کنن!
"استاد خودشون برای جلوگیری از درج شدن تکراری اطلاعات به صورت کامنت کردن" پس دیگه 1 بار باید Insert میشده! برداشتم این بود.
Mir Unknown 12 سال پیش
استاد اون ی بار Insert رو کمنت نکرده تا جای که من یادمه اون کد تکرار رو کمنت کردن
مجتبی یگانه 12 سال پیش
پاسخ isheykhi و Vahid کاملا درست هستند ، با این توضیح که در پاسخ Vahid پردازش دیتابیسی کمتری انجام میشه چون فقط تعداد سطر ها از بانک اطلاعات درخواست میشه
محمدی 12 سال پیش
از کمک همه ممنون مشکلم حل شد:)
Vahid 12 سال پیش
خواهش میشه ، بهتره برای تشکر روی لایک پست مربوطش کلیک میکردید ...
iSheykhi 12 سال پیش

شما می خواهید هر بار که برنامه اجرا شد در صورت خالی بودن Table در دیتابیس، به اون جدول اطلاعات واریز کنه
خب خیلی آسونه

 private void CreateTable() {
        // ساخت جدول
        G.db.execSQL("CREATE  TABLE  IF NOT EXISTS TableName(" +
                "id INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , " +
                "fldTitle TEXT, " +
                "fldContent TEXT, " +
                "fldBool BOOL, " +
                "fldNumber INTEGER" +
                ")");
        Log.i(G.LOG_TAG, "TableNameCreated Successfully");
cursor = G.db.rawQuery("SELECT * FROM TableName", null);
if ( !cursor.moveToNext()) { AddingValuesToTblNationalID();
// اگر جدول خالی بود و رکوردی پیدا نشد } else { Log.i(G.LOG_TAG, "tblNationalID Obtained Values Before");
// اگر اطلاعات درج شده بود } cursor.close(); }

 

توجه داشته باشید، با :

if ( !cursor.moveToNext())

شرط می ذاریم که اگر cursor چیزی رو پیدا نکرد

لطفا کدتون رو بذارید تا در صورت وجود ایراد تصحیح بشه

نظرات

محمدی 12 سال پیش
خیلی خیلی ممنون مشکلم حل شد:)
Vahid 12 سال پیش

شما در هر بار باید بررسی کنید که اطلاعات تو جدول وجود داره یا نه اگر اون اطلاعات وجود داشت خوب اینسرت صورت نگیره اگر وجود نداشت اینسرت انجام بشه ...

//Check
int id = 1;
Cursor rawQ = Global.appDatabase.rawQuery("SELECT count(*) FROM transactions WHERE `transaction_id` = '" + id + "'", null);
rawQ.moveToFirst();
int cTransactionCount = rawQ.getInt(0);
rawQ.close();
if (cTransactionCount <= 0) {
	// inja agar on etelat vojod nadasht inset anjam beshavad
}

نظرات

محمدی 12 سال پیش
مرسی از کمکتون :)
iSheykhi 12 سال پیش
جواب می ده، اما فکر نمی کنید پیچیده شده؟ البته جسارتا ، دوتا Variable از نوع Int ساخته شده که نیازی نیست و بدون اونها هم می شه کار کرد(کدنویسی تمیز) البته باز هم ببخشید، گفتم که، خودم هم اینطور می نوشتم، اما کمی پیچده می کنه
مجتبی یگانه 12 سال پیش
جدا از اینکه من با روش ایشون موافق ام ، باید بگم احتمالا بخاطر تفهیم بیشتر ما کد رو طولانی کردند - به هر حال حتی اگه یک راه حل 100 خطی هم ارائه بشه ، قابل تامل هست ، از نظر پیچیدگی هم که خوب ما وقتی برای اولین بار هرچیزی رو ببینیم ، پیچیدست !
Vahid 12 سال پیش
متغیر اول "id" چیزی هست که بنده از جایی میخوندمش و برای تفهیم گذاشتمش و متغییر دوم هم بهتره همین جوری استفاده بشه چون ، متغیر int از یه Cursor که باز مونده باشه حافظه کمتری رو اشغال میکنه و مورد سوم اینه که کد رو تا جای ممکن ساده نوشتم تا راحت درکش کنید ...
Devtpoint 11 سال پیش
اگر هم تکرار باشه میشه با دستور DISTINCT از sqlite داده های تکراری رو در نرم افزارتان نمایش ندهد
Amir.z 11 سال پیش

"INSERT or replace INTO your_database"

 

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .