【问题标题】:SQLite Android : SQLite Delete command not working properlySQLite Android:SQLite 删除命令无法正常工作
【发布时间】:2013-05-14 05:41:59
【问题描述】:

我正在创建一个 Android 应用程序,我需要能够从我的表中删除记录,该表由两列名称和 _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;
}

}

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    在您的帮助类中提及如下:

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

    然后在你的 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();
    }
    

    【讨论】:

    • 我完全不明白你的回答。我没有你写的这样的专栏,我也不明白你在这里想做什么。
    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多