اذهب إلى المحتوى
  • 0

خطأ في android studio عند إضافة بيانات لقاعدة sQlite

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])

والشيفرة:

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

خطأك هو تمرير نفس القيمة لأكثر من سجل في الجدول لحقل تم تطبيق عليه القيد UNIQUE أي مميز / فريد.

وبهذا ظهر الخطأ SQLITE_CONSTRAINT_UNIQUE تأكد أن قيمة الحقل المميز مختلفة بين السجلات التي تقوم بإضافتها.

الحقل الذي فيه المشكلة هو SID

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 9 دقائق مضت قال Wael Aljamal:

خطأك هو تمرير نفس القيمة لأكثر من سجل في الجدول لحقل تم تطبيق عليه القيد UNIQUE أي مميز / فريد.

وبهذا ظهر الخطأ SQLITE_CONSTRAINT_UNIQUE تأكد أن قيمة الحقل المميز مختلفة بين السجلات التي تقوم بإضافتها.

الحقل الذي فيه المشكلة هو SID

لم أفهم المشكل تماما 

عندما أضغط على الخطأ يأخذني إلى هنا 

16525608328725172319560071955311.jpg

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال Mohamed Lamin Mahmoudi:

لم أفهم المشكل تماما 

عندما أضغط على الخطأ يأخذني إلى هنا 

أنت تعمل addStatus لبيانات فيها SID نفسه، وهذا يعطي خطأ عند عمل insert

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...