Mohamed Lamin Mahmoudi نشر 14 مايو 2022 أرسل تقرير نشر 14 مايو 2022 عندما أضغط على زر الحفظ تظهر العديد من الأخطاء هذه الأخطاء E/SQLiteDatabase: Error inserting STATUS=A _SID=5 STATUS_DATE=14.05.2022 android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: STATUS_TABLE._SID, STATUS_TABLE.STATUS_DATE (code 2067 SQLITE_CONSTRAINT_UNIQUE[2067]) والشيفرة: package com.example.appmobile; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.Nullable; class DbHelper extends SQLiteOpenHelper { private static final int VERSION = 1; private static final String CLASS_TABLE_NAME = "CLASS_TABLE"; public static final String C_ID = "_CID"; public static final String CLASS_NAME_KEY = "CLASS_NAME"; public static final String SUBJECT_NAME_KEY = "SUBJECT_NAME"; private static final String CREATE_CLASS_TABLE = "CREATE TABLE " + CLASS_TABLE_NAME + "(" + C_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + CLASS_NAME_KEY + " TEXT NOT NULL, " + SUBJECT_NAME_KEY + " TEXT NOT NULL, " + "UNIQUE (" + CLASS_NAME_KEY + "," + SUBJECT_NAME_KEY + ")" + ");"; private static final String DROP_CLASS_TABLE = "DROP TABLE IF EXISTS "+CLASS_TABLE_NAME; private static final String SELECT_CLASS_TABLE = "SELECT * FROM "+CLASS_TABLE_NAME; private static final String STUDENT_TABLE_NAME = "STUDENT_TABLE"; public static final String S_ID = "_SID"; public static final String STUDENT_NAME_KEY = "STUDENT_NAME"; public static final String STUDENT_ROLL_KEY = "ROLL"; private static final String CREATE_STUDENT_TABLE = "CREATE TABLE " + STUDENT_TABLE_NAME + "( " + S_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + C_ID + " INTEGER NOT NULL, "+ STUDENT_NAME_KEY + " TEXT NOT NULL, " + STUDENT_ROLL_KEY + " INTEGER, "+ " FOREIGN KEY ( "+C_ID+") REFERENCES "+ CLASS_TABLE_NAME + "("+C_ID+")"+ ");"; private static final String DROP_STUDENT_TABLE = "DROP TABLE IF EXISTS "+STUDENT_TABLE_NAME; private static final String SELECT_STUDENT_TABLE = "SELECT * FROM "+STUDENT_TABLE_NAME; private static final String STATUS_TABLE_NAME = "STATUS_TABLE"; public static final String STATUS_ID = "_STATUS_CID"; public static final String DATE_KEY = "STATUS_DATE"; public static final String STATUS_KEY = "STATUS"; private static final String CREATE_STATUS_TABLE = "CREATE TABLE " + STATUS_TABLE_NAME + "(" + STATUS_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "+ S_ID + " INTEGER NOT NULL, " + DATE_KEY + " DATE NOT NULL, " + STATUS_KEY + " TEXT NOT NULL, " + "UNIQUE ("+ S_ID + "," + DATE_KEY+"),"+ " FOREIGN KEY ("+S_ID+") REFERENCES "+ STUDENT_TABLE_NAME + "( "+S_ID+")"+ ");"; private static final String DROP_STATUS_TABLE = "DROP TABLE IF EXISTS "+STATUS_TABLE_NAME; private static final String SELECT_STATUS_TABLE = "SELECT * FROM "+STATUS_TABLE_NAME; public DbHelper(@Nullable Context context) { super( context, "Attendance.db", null, VERSION ); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_CLASS_TABLE); db.execSQL(CREATE_STUDENT_TABLE); db.execSQL(CREATE_STATUS_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { try { db.execSQL( DROP_CLASS_TABLE ); db.execSQL( DROP_STUDENT_TABLE ); db.execSQL( DROP_STATUS_TABLE ); }catch (SQLException e){ e.printStackTrace(); } } long addClass(String className,String subjectName){ SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put( CLASS_NAME_KEY,className ); values.put( SUBJECT_NAME_KEY,subjectName ); return database.insert( CLASS_TABLE_NAME,null,values ); } Cursor getClassTable(){ SQLiteDatabase database = this.getReadableDatabase(); return database.rawQuery( SELECT_CLASS_TABLE,null ); } int deleteClass(long cid){ SQLiteDatabase database = this.getReadableDatabase(); return database.delete( CLASS_TABLE_NAME,C_ID+"=?",new String[]{String.valueOf( cid )} ); } long updateClass(long cid,String className,String subjectName){ SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put( CLASS_NAME_KEY,className ); values.put( SUBJECT_NAME_KEY,subjectName ); return database.update( CLASS_TABLE_NAME,values,C_ID+"=?",new String[]{String.valueOf( cid )}); } long addStudent(long cid,int roll,String name){ SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(C_ID,cid); values.put(STUDENT_ROLL_KEY,roll); values.put(STUDENT_NAME_KEY,name); return database.insert(STUDENT_TABLE_NAME,null,values ); } Cursor getStudentTAble(long cid){ SQLiteDatabase database = this.getReadableDatabase(); return database.query(STUDENT_TABLE_NAME,null,C_ID+"=?",new String[]{String.valueOf( cid )},null,null,STUDENT_ROLL_KEY ); } int deleteStudent(long sid){ SQLiteDatabase database = this.getReadableDatabase(); return database.delete( STUDENT_TABLE_NAME,S_ID+"=?",new String[]{String.valueOf( sid )} ); } long updateStudent(long sid,String name){ SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put( STUDENT_NAME_KEY,name ); return database.update( STUDENT_TABLE_NAME,values,S_ID+"=?",new String[]{String.valueOf( sid )}); } long addStatus(long sid,String date, String status){ SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(S_ID,sid); values.put(DATE_KEY,date); values.put(STATUS_KEY,status); return database.insert(STATUS_TABLE_NAME,null,values); } long updateStatus(long sid,String date, String status){ SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put( STATUS_KEY,status ); String whereClause = DATE_KEY +"='"+date+"' AND "+S_ID+"="+sid; return database.update( STATUS_TABLE_NAME,values,whereClause,null ); } String getStatus(long sid,String date){ String status =null; SQLiteDatabase database = this.getReadableDatabase(); String whereClause = DATE_KEY +"='"+date+"' AND "+S_ID+"="+sid; Cursor cursor = database.query( STATUS_TABLE_NAME,null,whereClause,null,null,null,null ); if (cursor.moveToFirst()) status = cursor.getString( cursor.getColumnIndexOrThrow( STATUS_KEY ) ); return status; } } DbHelper.javaFetching info... 1 اقتباس
0 Wael Aljamal نشر 14 مايو 2022 أرسل تقرير نشر 14 مايو 2022 خطأك هو تمرير نفس القيمة لأكثر من سجل في الجدول لحقل تم تطبيق عليه القيد UNIQUE أي مميز / فريد. وبهذا ظهر الخطأ SQLITE_CONSTRAINT_UNIQUE تأكد أن قيمة الحقل المميز مختلفة بين السجلات التي تقوم بإضافتها. الحقل الذي فيه المشكلة هو SID 1 اقتباس
0 Mohamed Lamin Mahmoudi نشر 14 مايو 2022 الكاتب أرسل تقرير نشر 14 مايو 2022 بتاريخ On 14/5/2022 at 20:30 قال Wael Aljamal: خطأك هو تمرير نفس القيمة لأكثر من سجل في الجدول لحقل تم تطبيق عليه القيد UNIQUE أي مميز / فريد. وبهذا ظهر الخطأ SQLITE_CONSTRAINT_UNIQUE تأكد أن قيمة الحقل المميز مختلفة بين السجلات التي تقوم بإضافتها. الحقل الذي فيه المشكلة هو SID أظهر المزيد لم أفهم المشكل تماما عندما أضغط على الخطأ يأخذني إلى هنا اقتباس
0 Wael Aljamal نشر 14 مايو 2022 أرسل تقرير نشر 14 مايو 2022 بتاريخ On 14/5/2022 at 20:45 قال Mohamed Lamin Mahmoudi: لم أفهم المشكل تماما عندما أضغط على الخطأ يأخذني إلى هنا أظهر المزيد أنت تعمل addStatus لبيانات فيها SID نفسه، وهذا يعطي خطأ عند عمل insert 1 اقتباس
السؤال
Mohamed Lamin Mahmoudi
عندما أضغط على زر الحفظ تظهر العديد من الأخطاء هذه الأخطاء
E/SQLiteDatabase: Error inserting STATUS=A _SID=5 STATUS_DATE=14.05.2022 android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: STATUS_TABLE._SID, STATUS_TABLE.STATUS_DATE (code 2067 SQLITE_CONSTRAINT_UNIQUE[2067])
والشيفرة:
DbHelper.javaFetching info...
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.