我正在创建一个 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;
}
}