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.java 1 اقتباس
0 Wael Aljamal نشر 14 مايو 2022 أرسل تقرير نشر 14 مايو 2022 خطأك هو تمرير نفس القيمة لأكثر من سجل في الجدول لحقل تم تطبيق عليه القيد UNIQUE أي مميز / فريد. وبهذا ظهر الخطأ SQLITE_CONSTRAINT_UNIQUE تأكد أن قيمة الحقل المميز مختلفة بين السجلات التي تقوم بإضافتها. الحقل الذي فيه المشكلة هو SID 1 اقتباس
0 Mohamed Lamin Mahmoudi نشر 14 مايو 2022 الكاتب أرسل تقرير نشر 14 مايو 2022 بتاريخ 9 دقائق مضت قال Wael Aljamal: خطأك هو تمرير نفس القيمة لأكثر من سجل في الجدول لحقل تم تطبيق عليه القيد UNIQUE أي مميز / فريد. وبهذا ظهر الخطأ SQLITE_CONSTRAINT_UNIQUE تأكد أن قيمة الحقل المميز مختلفة بين السجلات التي تقوم بإضافتها. الحقل الذي فيه المشكلة هو SID لم أفهم المشكل تماما عندما أضغط على الخطأ يأخذني إلى هنا اقتباس
0 Wael Aljamal نشر 14 مايو 2022 أرسل تقرير نشر 14 مايو 2022 بتاريخ 3 دقائق مضت قال 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.java
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.