0

I am creating an Android application for which I need to be able to delete records from my table that consists of two columns Name and _id both of type text where _id is the primary key. However given the value of _id for which the record is to be deleted the SQLite query is not working. The app runs throughout without any problems but it doesn't delete the required rows. I am sure those records exist in the Database. I am fairly new to Android Applications and SQLite. I read other similar posts but I couldn't find what's wrong with my code. Please Help.

Note: I also tried db.execSQL() in place of db.delete() but it didn't help either.

Here's my Contact_Delete.java file.

package com.tintin.prototype_2;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Contact_Delete extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    setContentView(R.layout.contact_delete);

    TextView tv = (TextView) findViewById(R.id.deletenumtv);
    final EditText et = (EditText) findViewById(R.id.deletenumet);
    Button b = (Button) findViewById(R.id.Submitdelete);

    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            DbTest db = new DbTest(Contact_Delete.this);
            String numtobedelted = et.getText().toString();
            if(numtobedelted.compareTo("")==0)Toast.makeText(getApplicationContext(), "Invalid entry", Toast.LENGTH_SHORT).show();
            else{
                if(db.deletevalues(numtobedelted)>0)Toast.makeText(getApplicationContext(), "Deleted", Toast.LENGTH_SHORT).show();
                else Toast.makeText(getApplicationContext(), "Total Number of Contacts="+db.getNumberofContacts(), Toast.LENGTH_SHORT).show();
            }
            et.setText("");
            db.close();
        }
    });
}
}

Here's my DbTest.java file

package com.tintin.prototype_2;

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

public class DbTest extends SQLiteOpenHelper{

static final String dbName = "demoDB";
static final String contactTable = "Contacts";
static final String ID = "Index";
static final String Name = "Name";
static final String Number = "_id";
static int idx=1;

public DbTest(Context context){
    super(context, dbName, null, 3);
}

public void onCreate(SQLiteDatabase db){
    db.execSQL("CREATE TABLE Contacts (Name TEXT , _id TEXT PRIMARY KEY);");
}

public void onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion){
    Log.v("Upgrade", "Upgrading database from version " + oldVersion 
            + " to "
            + newVersion);
    db.execSQL("DROP TABLE IF EXISTS Contacts");
    onCreate(db);
}

public boolean insertvalues(String x, String y){
    boolean ret=true;
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    Log.v("Value of x", x);
    Log.v("Value of y", y);
    cv.put(Name, "'"+x+"'");
    cv.put(Number, "'"+y+"'");
    try {
        db.insertOrThrow(contactTable, null, cv);
    } catch (SQLiteConstraintException e) {
        Log.v("Exception","Number already in database");
        ret=false;
        e.printStackTrace();
    }
    Log.v("done", "done");
    db.close();
    return ret;
}

public int deletevalues(String num){
    SQLiteDatabase db = this.getWritableDatabase();
    int i = db.delete(contactTable, "_id = '"+num+"'", null);
    db.close();
    Log.v("end", "Delete query ran");
    return i;
}

public Cursor getallContacts(){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor mCursor = db.rawQuery("Select * from Contacts", null);
    db.close();
    return mCursor;
}

public int getNumberofContacts(){
    SQLiteDatabase db = this.getReadableDatabase();
    int numRows = (int) DatabaseUtils.queryNumEntries(db, "Contacts");
    Cursor c = db.rawQuery("select * from Contacts",null);
    Log.v("Number of Records"," :: "+c.getCount());
    c.close();
    return numRows;
}

public Cursor getContact(String name){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor ret = db.query(contactTable, null, "Name="+name, null, null, null, null);
    if(ret!=null)ret.moveToFirst();
    db.close();
    return ret;
}

}
0

1 Answer 1

0

In your helper class mention like :

       public void deletedatabase(String search, String status,String col) {
       Cursor c = null;
       int id = 0;
       boolean statu = false;
       String[] columns = new String[] { "id", "name", "address", "department" };
       c = db.query(STUDENT_TABLE, columns,
        "name=? OR address=? OR department=?", new String[] { search,
       search, search }, null, null, "id DESC");
       if (c.moveToFirst()){
   do {
       if (c.getColumnCount() == 4) {
       String[] str = new String[3];
       str[0] = c.getString(1);
       str[1] = c.getString(2);
       str[2] = c.getString(3);
       id = c.getInt(0);
       statu = true;
        }
      } while (c.moveToNext());
   }

      if (c != null && !c.isClosed()) {
      c.close();
    }
      if (statu) {
      if (status.equals("update")) {
     updateData(col, search,id);
   }
      if (status.equals("delete")) {
      if (id != 0) {
      deletedata(id);
    }
  }
 }
}

public void deletedata(int id) {
db.delete(STUDENT_TABLE, "id=?", new String[] { String.valueOf(id) });
}

Then in your Acitivity :

     String searc=null;
     if(!nameET.getText().toString().equals("")){
     searc=nameET.getText().toString();
     SQLHelper.deletedatabase(searc,"delete","");
     DATA=SQLHelper.selectalldatabase();
     lv.setAdapter(new MyCustomBaseAdapter(this, DATA));
   }else if(!addressET.getText().toString().equals("")){
    searc=addressET.getText().toString();
    SQLHelper.deletedatabase(searc,"delete","");
    DATA=SQLHelper.selectalldatabase();
    lv.setAdapter(new MyCustomBaseAdapter(this, DATA));
  }   else if(!deptET.getText().toString().equals("")){
    searc=deptET.getText().toString();
    SQLHelper.deletedatabase(searc,"delete","");
    DATA=SQLHelper.selectalldatabase();
    lv.setAdapter(new MyCustomBaseAdapter(this, DATA));
  } else{
    Toast.makeText(this, "Please Enter Search keywork of any one Field", 10).show();
}
Sign up to request clarification or add additional context in comments.

1 Comment

I do not understand your answer at all. I have no such columns as you have written neither do I understand what you are trying to do here.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.