السلام عليكم

عندي داتابيس في الاندوريد

عملت جدول

لكن لما ابغي اضيف صف اخر في الجدول

يعني مابيقبل الاضافه مره اخرى

مع اني ما عملت unique عدم التكرار

||

هذا كلاس الداتابيس :

package com.example.tests;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;

public class Mydatabase extends SQLiteOpenHelper {
    public static final String Db_name="Firstdatabase";
    public static final String COLOR_CMD="COLOR";
    public static final String CAR_TB_NAME="CAR";
    public static final String MODEL_CMD="MODEL";
    public static final String ID_CMD="ID";
    public static final String DISTANCE_CMD="DISTANCE";
    public static final int Db_version=7;


    public Mydatabase(Context context){
        super(context,Db_name,null,Db_version);
    }


    @Override
    //يتم استدعاء الداله عند انشاء الداتابيس
    public void onCreate(SQLiteDatabase db) {
        //CREATE NEW TABLE
        //طريقة انشاء جدول في الداتابيس
        db.execSQL("CREATE TABLE "+CAR_TB_NAME+"("+ID_CMD+" INTEGER PRIMARY KEY AUTOINCREMENT ,"+MODEL_CMD+"  TEXT ,"+COLOR_CMD+" TEXT NOT NULL ,"+DISTANCE_CMD+" REAL)");

    }


    @Override
    //يتم استدعاء الداله عند تحديث داتا بيس
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS " +CAR_TB_NAME );
        onCreate(db);


    }



    public boolean insertdata(Car car){
        SQLiteDatabase db=getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put(ID_CMD,car.getId());
        values.put(MODEL_CMD,car.getModel());
        values.put(COLOR_CMD,car.getColor());
        values.put(DISTANCE_CMD,car.getDistance());
       long result=db.insert(CAR_TB_NAME,null,values);
       if(result==-1){
           return  false;
       }else
           return true;

    }
    //دالة التعديل
    public boolean updatedata(Car car){
        SQLiteDatabase db=getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put(ID_CMD,car.getId());
        values.put(MODEL_CMD,car.getModel());
        values.put(COLOR_CMD,car.getColor());
        values.put(DISTANCE_CMD,car.getDistance());
        String [] args={car.getId()+""};
        int result=db.update(CAR_TB_NAME,values,"id?",args);
        return result>0;

    }
    // دالة الحدف
    public boolean deletedata(Car car){
        SQLiteDatabase db=getWritableDatabase();

        String [] args={car.getId()+""};
        int result=db.delete(CAR_TB_NAME,"id?",args);
        return result>0;

    }
    //ارجاع عدد الصفوف الجدول
    public long getcarscount(){
        SQLiteDatabase db=getWritableDatabase();
        return DatabaseUtils.queryNumEntries(db,CAR_TB_NAME);



    }


    public ArrayList<Car> getallcars(){
        ArrayList<Car> cars=new ArrayList<Car>();
        SQLiteDatabase db=getReadableDatabase();
       Cursor c= db.rawQuery("SELECT * FROM " +CAR_TB_NAME,null );
       if(c.moveToFirst()){
           do {
               int id=c.getInt(c.getColumnIndex(ID_CMD));
               String model=c.getString(c.getColumnIndex(MODEL_CMD));
               String color=c.getString(c.getColumnIndex(COLOR_CMD));
               double distance=c.getDouble(c.getColumnIndex(DISTANCE_CMD));

               Car car=new Car(id,color,model,distance);
               cars.add(car);
           }
           while(c.moveToNext());
           c.close();




       }
        return cars;
    }
    public ArrayList<Car> SEARCHdata(String modelsearch){
        ArrayList<Car> cars=new ArrayList<Car>();
        SQLiteDatabase db=getReadableDatabase();
       Cursor c= db.rawQuery("SELECT * FROM " +CAR_TB_NAME+" WHERE "+ MODEL_CMD+"=?",new String[] {modelsearch} );
       if(c.moveToFirst()){
           do {
               int id=c.getInt(c.getColumnIndex(ID_CMD));
               String model=c.getString(c.getColumnIndex(MODEL_CMD));
               String color=c.getString(c.getColumnIndex(COLOR_CMD));
               double distance=c.getDouble(c.getColumnIndex(DISTANCE_CMD));

               Car car=new Car(id,color,model,distance);
               cars.add(car);
           }
           while(c.moveToNext());
           c.close();




       }
        return cars;
    }


}


والاستدعاء هنا:

package com.example.tests;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;

import org.w3c.dom.Text;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    SharedPreferences sp;
    SharedPreferences.Editor editor;
    static EditText  et_distance;
    static EditText et_color,et_model;
    Button save, restore,delete;
    TextView textView;
    Mydatabase mydatabase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et_distance = findViewById(R.id.editTextTextPersonName3);
        et_color = findViewById(R.id.editTextTextPersonName4);
        et_model = findViewById(R.id.editTextTextPersonName);
        save = findViewById(R.id.save_btn);
        restore = findViewById(R.id.srestore_btn2);
        textView = findViewById(R.id.textView);
        delete=findViewById(R.id.delete);

        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });





        mydatabase = new Mydatabase(this);



        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               try {

                   String model = et_model.getText().toString();
                   String color = et_color.getText().toString();
                   double dis = Double.parseDouble(et_distance.getText().toString());
                   Car car=new Car(color,model,dis);
                   boolean res=mydatabase.insertdata(car);
                   if(res)
                       Snackbar.make(textView,"تمت العمليه بنجاح",Snackbar.LENGTH_LONG).show();
                   else
                       Snackbar.make(textView,"  فشلت العمليه ",Snackbar.LENGTH_LONG).show();
               }
               catch (Exception e){

               }






            }
        });
        restore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                ArrayList<Car> cars=mydatabase.getallcars();
                for(Car c: cars){
                    Log.d("car #"+c.getId(),c.getModel());
                    Log.d("car #"+c.getId(),c.getColor());

                }





            }
        });




    }

}





لما اضيف مرة اخرى بيقول فشلت العمليه بيعني بيرجع false

هل في شئ نسيته في الكود؟