0

我正在创建一个 Android 应用程序,我需要能够从我的表中删除记录,该表由 Name 和 _id 两列组成,两者都是文本类型,其中 _id 是主键。但是,考虑到要删除记录的 _id 值,SQLite 查询不起作用。该应用程序运行自始至终没有任何问题,但它不会删除所需的行。我确信这些记录存在于数据库中。我对 Android 应用程序和 SQLite 相当陌生。我阅读了其他类似的帖子,但我找不到我的代码有什么问题。请帮忙。

注意:我也尝试使用 db.execSQL() 代替 db.delete() 但它也没有帮助。

这是我的 Contact_Delete.java 文件。

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();
        }
    });
}
}

这是我的 DbTest.java 文件

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;
}

}
4

1 回答 1

0

在您的助手类中提到:

       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) });
}

然后在您的活动中:

     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();
}
于 2013-05-14T07:03:05.283 回答