آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

محمدی  12 سال پیش  11 سال پیش
+2 0

سلام 

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

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

0 0
کد php و کد برنامه رو بنویسید تا بشه کمک کرد ! (12 سال پیش)
0 0
خب لابد یه خط کد insert تو برنامه داری که با هر بار اجرا کار خودشو میکنه دیگه (12 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
محمدی  12 سال پیش
0 0

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

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

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

شما می خواهید هر بار که برنامه اجرا شد در صورت خالی بودن 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 چیزی رو پیدا نکرد

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

0 0
خیلی خیلی ممنون مشکلم حل شد:) (12 سال پیش)
پاسخ به سوال 
Vahid  12 سال پیش
+3 0

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

//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
}
0 0
مرسی از کمکتون :) (12 سال پیش)
0 0
جواب می ده، اما فکر نمی کنید پیچیده شده؟ البته جسارتا ، دوتا Variable از نوع Int ساخته شده که نیازی نیست و بدون اونها هم می شه کار کرد(کدنویسی تمیز) البته باز هم ببخشید، گفتم که، خودم هم اینطور می نوشتم، اما کمی پیچده می کنه (12 سال پیش)
0 0
جدا از اینکه من با روش ایشون موافق ام ، باید بگم احتمالا بخاطر تفهیم بیشتر ما کد رو طولانی کردند - به هر حال حتی اگه یک راه حل 100 خطی هم ارائه بشه ، قابل تامل هست ، از نظر پیچیدگی هم که خوب ما وقتی برای اولین بار هرچیزی رو ببینیم ، پیچیدست ! (12 سال پیش)
0 0
متغیر اول "id" چیزی هست که بنده از جایی میخوندمش و برای تفهیم گذاشتمش و متغییر دوم هم بهتره همین جوری استفاده بشه چون ، متغیر int از یه Cursor که باز مونده باشه حافظه کمتری رو اشغال میکنه و مورد سوم اینه که کد رو تا جای ممکن ساده نوشتم تا راحت درکش کنید ... (12 سال پیش)
0 0
اگر هم تکرار باشه میشه با دستور DISTINCT از sqlite داده های تکراری رو در نرم افزارتان نمایش ندهد (11 سال پیش)
پاسخ به سوال 
Amir.z  11 سال پیش
0 0

"INSERT or replace INTO your_database"

 


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