0

In the below activity-The user has to enter the defined fields. Once the entry has been made, user can edit the changes and save.However in my app the entries are successfully getting inserted in to database but while editing the same fields I get an illegal argument exception that website_1 column doesn't exist, though I checked in the database the column exists.Thanks in advance

Note: populateFields is the method where I am getting error. Asa the activity starts the populateField method is called to fill the fields.

public class Newform_Screen2_Likewebsite_edit extends Activity {
    EditText w1,c1,w2,c2,w3,c3;
    Button btn_save;
    private String srowId;
    DBAdapter dba;
    SQLiteDatabase myDB;
    private Context context;    



    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      setContentView(R.layout.newform_screen2_websites);


        dba=new DBAdapter(this);
        context=Newform_Screen2_Likewebsite_edit.this;
        final Intent intent = getIntent();
        srowId=intent.getStringExtra("KEYROWID");

        myDB=DBAdapter.openDatabase(context, DBAdapter.DATABASE_NAME);

        w1=(EditText)findViewById(R.id.www1_web_id);
        w2=(EditText)findViewById(R.id.www2_web_id);
        w3=(EditText)findViewById(R.id.www3_web_id);
        c1=(EditText)findViewById(R.id.color1_id);
        c2=(EditText)findViewById(R.id.color2_id);
        c3=(EditText)findViewById(R.id.color3_id);
        btn_save=(Button)findViewById(R.id.btn_save_web);


          populateFields();



        btn_save.setOnClickListener(new OnClickListener(){


            public void onClick(View v) {
                n2();
                n1();


            }

            private void n2() {

       dba = new DBAdapter(Newform_Screen2_Likewebsite_edit.this);


                   String s1=w1.getText().toString();
                   String s2=w2.getText().toString();
                   String s3=w3.getText().toString();
                   String s4=c1.getText().toString();
                   String s5=c2.getText().toString();
                   String s6=c3.getText().toString();

                String updatequery  = "UPDATE "+ DBAdapter.DATABASE_TABLE+ " SET ";
                updatequery = updatequery + DBAdapter.KEY_WEBSITE_1+" = '" + s1 +"',";
                updatequery = updatequery + DBAdapter.KEY_WEBSITE_2+" = '" + s2 + "',";
                updatequery = updatequery + DBAdapter.KEY_WEBSITE_3+" = '" + s3 + "',";
                updatequery = updatequery + DBAdapter.KEY_COLOR_1+" = '" + s4 + "',";
                updatequery = updatequery + DBAdapter.KEY_COLOR_2+" = '" + s5 + "',";
                updatequery = updatequery + DBAdapter.KEY_COLOR_3+" = '"+s6+"'";
                updatequery = updatequery + " WHERE _id = '" + srowId + "';";
                Log.v("updatequery-new-likewebsite-edit",updatequery);

                try{

                    Log.v("test-2","update");
                    dba.open();
                    myDB.execSQL(updatequery);

                }catch(NullPointerException e){

                    e.getMessage();
                }finally{
                    Log.v("test-3","update");

                    if(myDB != null)myDB.close();
                    dba.close();
                }

            }

            private void Log(String string) {
                Log.i("Activity-check",""+string);

            }


            private void n1() {

                Intent I = new Intent(Newform_Screen2_Likewebsite_edit.this,Newform_Screen2_edit.class);
                I.putExtra("rowid", srowId);
                startActivity(I);

            }

        });


    }


    private void populateFields() {
        dba.open();


         if (srowId != null) {
             Log.v("rowid",srowId.toString());
             long mRowId=Long.parseLong(srowId);
                Cursor cur = dba.fetchSaleseditdetails(mRowId);
                startManagingCursor(cur);
                try{

                    Log.v("test populate","test populate");

                w1.setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_WEBSITE_1)));
                w2.setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_WEBSITE_2)));
                w3.setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_WEBSITE_3)));
                c1 .setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_COLOR_1)));
                c2.setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_COLOR_2)));
                c3.setText(cur.getString(cur.getColumnIndexOrThrow(DBAdapter.KEY_COLOR_3)));

                }
                catch(Exception e){
                    e.printStackTrace();
                }

            }
        dba.close();
    }


    protected void onDestroy() {
        super.onDestroy();
        if (dba != null) {
            dba.close();
        }
        if (myDB != null) {
            myDB.close();
        }
    }


}

The Logcat file

   02-22 10:49:29.717: W/System.err(20723): java.lang.IllegalArgumentException: column 'website_1' does not exist
02-22 10:49:29.717: W/System.err(20723):    at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:302)
02-22 10:49:29.717: W/System.err(20723):    at com.example.exa_sales_new.Newform_Screen2_Likewebsite_edit.populateFields(Newform_Screen2_Likewebsite_edit.java:135)
02-22 10:49:29.717: W/System.err(20723):    at com.example.exa_sales_new.Newform_Screen2_Likewebsite_edit.onCreate(Newform_Screen2_Likewebsite_edit.java:48)
02-22 10:49:29.717: W/System.err(20723):    at android.app.Activity.performCreate(Activity.java:5008)
02-22 10:49:29.717: W/System.err(20723):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
02-22 10:49:29.717: W/System.err(20723):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
02-22 10:49:29.717: W/System.err(20723):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-22 10:49:29.717: W/System.err(20723):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-22 10:49:29.717: W/System.err(20723):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-22 10:49:29.717: W/System.err(20723):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 10:49:29.717: W/System.err(20723):    at android.os.Looper.loop(Looper.java:137)
02-22 10:49:29.717: W/System.err(20723):    at android.app.ActivityThread.main(ActivityThread.java:4745)
02-22 10:49:29.717: W/System.err(20723):    at java.lang.reflect.Method.invokeNative(Native Method)
02-22 10:49:29.717: W/System.err(20723):    at java.lang.reflect.Method.invoke(Method.java:511)
02-22 10:49:29.717: W/System.err(20723):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-22 10:49:29.717: W/System.err(20723):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-22 10:49:29.717: W/System.err(20723):    at dalvik.system.NativeStart.main(Native Method)
Shweta
  • 807
  • 3
  • 11
  • 24

1 Answers1

0
  • I think you are calling populateFields(); to access the column but table is not created yet, that's why you are getting "column 'website_1' does not exist" exception.

  • I would strongly recommended you to have a look at SQLiteOpenHelper Class to manage your database. It will internally handle when to create the database's schema or when to upgrade it.

Here is a sample example which will give you some idea about how to upgrade your database or execute alter query.

public class OpenHelper extends SQLiteOpenHelper {

    private final static int DB_VERSION = 2;

    public TracksDB(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        final String CREATE_TBL =
            "create table " + ANIMALS_TABLE +
            " (_id integer primary key autoincrement, " + 
            "animal_name text not null, " +
            "biography text not null);";
             db.execSQL(CREATE_TBL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (oldVersion < 2) {
            final String ALTER_TBL = 
                "ALTER TABLE " + ANIMALS_TABLE +
                " ADD COLUMN biography text not null;";
            db.execSQL(ALTER_TBL);
        }
    }
} 

You can refer this link for more information about upgrading database.

Note :

  • onCreate() will only call when you are installing app for the first time only and onUpgrade() will only call when app is already installed and you are just updating it.

Hope this will help you to solve your problem.

Community
  • 1
  • 1
Moin Ahmed
  • 2,898
  • 21
  • 33