svs
svs

Reputation: 387

Android sqlite:Error inserting values: SQLite constraint exception

After creating database,when I tried to insert values, I found Exception as follows..

android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

I don't know why this is happening.. Anyone please help me.. Thanx in advance... The main class and the helper class is given below..

public class Database extends Activity{

    public static final String MYDATABASE_NAMEEE = "MY_DATABASE_RESTAURANT";
    public static final int MYDATABASE_VERSION = 4;
    public static final String MYDATABASE_TABLE = "Restaurant";
    public static final String KEY_ID = "_id";
    public static final String KEY_CONTENT1 = "Restaurant_name";
    public static final String KEY_CONTENT2 = "Ac_or_nonac";
    public static final String KEY_CONTENT3 = "Total_chairs";
    public static final String KEY_CONTENT4 = "Reserved_chairs";
    public static final String KEY_CONTENT5 = "Date";
    public static final String KEY_CONTENT6 = "fromTime"; 
    public static final String KEY_CONTENT7 = "toTime"; 
    public static final String KEY_CONTENT8 = "Name";
    public static final String KEY_CONTENT9 = "Contact_Number";
    public static final String KEY_CONTENT10 = "Table_id";

    private Helper helper;
    private SQLiteDatabase database;

    Button button_submit;
    ListView listView;
    EditText editText_name,editText_number,editText_seats,editText_date,editText_fromtime,editText_totime;
    SimpleCursorAdapter cursorAdapter;
    Cursor cursor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.databaselist);

        listView = (ListView) findViewById(R.id.listView1);
        button_submit = (Button) findViewById(R.id.button_submit);
        editText_date = (EditText) findViewById(R.id.editText_date);
        editText_fromtime = (EditText) findViewById(R.id.editText_fromtime);
        editText_name = (EditText) findViewById(R.id.editText_name);
        editText_number = (EditText) findViewById(R.id.editText_contactnumber);
        editText_seats = (EditText) findViewById(R.id.editText_seatsneeded);
        editText_totime = (EditText) findViewById(R.id.editText_totime);


        helper = new Helper(this, MYDATABASE_NAMEEE, null, MYDATABASE_VERSION);
        database = helper.getWritableDatabase();

        cursor = database.query(MYDATABASE_TABLE, null,null, null, null, null, null);
        String[] from=new String[]{KEY_ID,KEY_CONTENT3,KEY_CONTENT4,KEY_CONTENT5
                ,KEY_CONTENT6,KEY_CONTENT7,KEY_CONTENT8,KEY_CONTENT9,KEY_CONTENT10};
        int[] to=new int[]{R.id.textView_id,R.id.textView_totalno_ofseats,R.id.textView_no_ofseatsreserved,R.id.textView_date
            ,R.id.textView_timefrom,R.id.textView_totime,R.id.textView_name,R.id.textView_contactnumber,R.id.textView_tableid};
        cursorAdapter=new  SimpleCursorAdapter(getApplicationContext(), R.layout.databasetext, cursor, from, to);
        listView.setAdapter(cursorAdapter);


        button_submit.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
            String date = editText_date.getText().toString();
            String fromtime = editText_fromtime.getText().toString();
            String name = editText_name.getText().toString();
            String number = editText_number.getText().toString();
            String seats = editText_seats.getText().toString();
            String totime = editText_totime.getText().toString();

            ContentValues cv1 = new ContentValues();
            cv1.put(KEY_CONTENT5, date);
            cv1.put(KEY_CONTENT6, fromtime);
            cv1.put(KEY_CONTENT8, name);
            cv1.put(KEY_CONTENT9, number);
            cv1.put(KEY_CONTENT4, seats);
            database.insert(MYDATABASE_TABLE, null, cv1);
            //cursor.requery();

            editText_date.setText("");
            editText_fromtime.setText("");
            editText_name.setText("");
            editText_number.setText("");
            editText_seats.setText("");
            editText_totime.setText("");
            filldata();

            }
        });
    }
    private void filldata() {
        // TODO Auto-generated method stub
        Cursor cursor = database.query(MYDATABASE_TABLE, null,
                null, null, null, null,null);

        String[] from=new String[]{KEY_ID,KEY_CONTENT3,KEY_CONTENT4,KEY_CONTENT5
                ,KEY_CONTENT6,KEY_CONTENT7,KEY_CONTENT8,KEY_CONTENT9,KEY_CONTENT10};
        int[] to=new int[]{R.id.textView_id,R.id.textView_totalno_ofseats,R.id.textView_no_ofseatsreserved,R.id.textView_date
            ,R.id.textView_timefrom,R.id.textView_totime,R.id.textView_name,R.id.textView_contactnumber,R.id.textView_tableid};
        cursorAdapter=new  SimpleCursorAdapter(getApplicationContext(), R.layout.databasetext, cursor, from, to);
        listView.setAdapter(cursorAdapter);

    }
}




public class Helper extends SQLiteOpenHelper{

    public static final String MYDATABASE_TABLE = "Restaurant";
    public static final String KEY_ID = "_id";
    public static final String KEY_CONTENT1 = "Restaurant_name";
    public static final String KEY_CONTENT2 = "Ac_or_nonac";
    public static final String KEY_CONTENT3 = "Total_chairs";
    public static final String KEY_CONTENT4 = "Reserved_chairs";
    public static final String KEY_CONTENT5 = "Date";
    public static final String KEY_CONTENT6 = "fromTime"; 
    public static final String KEY_CONTENT7 = "toTime"; 
    public static final String KEY_CONTENT8 = "Name";
    public static final String KEY_CONTENT9 = "Contact_Number";
    public static final String KEY_CONTENT10 = "Table_id";


    private static final String SCRIPT_CREATE_DATABASE =
          "create table " + MYDATABASE_TABLE + " ("
          + KEY_ID + " integer primary key, "
          + KEY_CONTENT1 + " text not null, "
          + KEY_CONTENT2 + " text not null, "
          + KEY_CONTENT3 + " integer not null, "
          + KEY_CONTENT4 + " integer not null, "
          + KEY_CONTENT5 + " text not null, "
          + KEY_CONTENT6 + " text not null, "
          + KEY_CONTENT7 + " text not null, "
          + KEY_CONTENT8 + " text not null, "
          + KEY_CONTENT9 + " text not null, "
          + KEY_CONTENT10 + " text not null) ";


    public Helper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(SCRIPT_CREATE_DATABASE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }
}

Upvotes: 0

Views: 5953

Answers (4)

yugidroid
yugidroid

Reputation: 6690

Be sure you are inserting a row with a valid primary key, i.e., make it unique in the table (I think you are having this exeception just because you're trying to insert a row which primary key is already defined in the same database table).

Upvotes: 2

5hssba
5hssba

Reputation: 8079

correct the definition of your database ..because on declaring fields as not null ..you must send some data to every field.. so remove not nul1 from data fields where it is not required

Upvotes: 1

Orlymee
Orlymee

Reputation: 2357

Make sure that you are not trying to insert some value in there that is not unique. Make sure that you are not trying to skip any "not null" values in your insert. Either provide a value of not null columns or define a default value.

On a different note you are defining KEY_CONTENT1 and so on in 2 different classes with same values. Don't repeat. You are using a static context for them so define them in one class and use the static context to retrieve them else where.

Upvotes: 0

flo
flo

Reputation: 2018

In your database schema you declared everything as NOT NULL, but in your insert your don't have a value for every field. SQLite throws an exception because it doesn't know what to insert into the fields. Remove the NOT NULL constraints so that SQlite can insert a null value as default or add a value for every field.

Upvotes: 1

Related Questions