我正在创建一个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;
}
}
答案 0 :(得分: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) });
}
然后在你的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();
}