如何删除的android源码单行 [英] How to delete a single row in android sqlite
问题描述
我 sqlite的
数据重新presented在的ListView
由 CustomListAdapter
点击。对一排的警报对话
弹出提示,用户可以从 sqlite的删除单列
在我的活动:
私人无效deleteDialog(){
AlertDialog.Builder alertDialog =新AlertDialog.Builder(MyCart.this);
alertDialog.setCancelable(假);
alertDialog.setMessage(删除项目?);
alertDialog.setPositiveButton(是,新DialogInterface.OnClickListener(){
公共无效的onClick(DialogInterface对话,诠释它){
myDb.deleteSingleContact(的toString());
}
});
alertDialog.setNegativeButton(取消,新DialogInterface.OnClickListener(){
公共无效的onClick(DialogInterface对话,诠释它){
dialog.cancel(); }
});
alertDialog.show();
}
在我的DBHelper.java:
公共无效deleteSingleContact(字符串名称){ SQLiteDatabase分贝= this.getWritableDatabase();
db.delete(CONTACTS_TABLE_NAME,CONTACTS_COLUMN_TITLE +=?,新的String [] {标题});
// KEY_NAME是一个列名
}
不过上述code不删anything.I猜测它的功能,我还没有做过correctly.Any建议?
全部DBHelper.java
公共类DBHelper扩展SQLiteOpenHelper { 公共静态最后弦乐DATABASE_NAME =MyDBName.db;
公共静态最后弦乐CONTACTS_TABLE_NAME =接触;
公共静态最后弦乐CONTACTS_COLUMN_ID =ID;
公共静态最后弦乐CONTACTS_COLUMN_TITLE =称号;
公共静态最后弦乐CONTACTS_COLUMN_AMOUNT =量;
公共静态最后弦乐CONTACTS_COLUMN_DESC =说明; 私人HashMap的马力; 公共DBHelper(上下文的背景下){
超级(上下文,DATABASE_NAME,空,1);
} @覆盖
公共无效的onCreate(SQLiteDatabase DB){
// TODO自动生成方法存根
db.execSQL(
CREATE TABLE接触+
(ID整数主键,标题文字,金额浮动,说明文字)
);
} @覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
// TODO自动生成方法存根
db.execSQL(DROP TABLE IF EXISTS接触);
的onCreate(DB);
} 公共布尔insertContact(字符串标题,浮动金额,字符串描述){
SQLiteDatabase分贝= this.getWritableDatabase();
ContentValues contentValues =新ContentValues(); contentValues.put(题,题);
contentValues.put(量,量);
contentValues.put(说明,说明);
db.insert(联系人,空,contentValues);
返回true;
} 公共光标的getData(INT ID){
SQLiteDatabase分贝= this.getReadableDatabase();
光标解析度= db.rawQuery(从通讯录中选择*其中id =+编号+,NULL);
返回水库;
} 公众诠释numberOfRows(){
字符串countQuery =SELECT * FROM+ CONTACTS_TABLE_NAME;
SQLiteDatabase分贝= this.getReadableDatabase();
光标光标= db.rawQuery(countQuery,NULL);
INT CNT = cursor.getCount();
cursor.close();
返回CNT;
} 公共布尔updateContact(整数ID字符串标题,浮动金额,字符串描述){
SQLiteDatabase分贝= this.getWritableDatabase();
ContentValues contentValues =新ContentValues();
contentValues.put(题,题);
contentValues.put(量,量);
contentValues.put(说明,说明); db.update(联系人,contentValues,ID =?,新的String [] {Integer.toString(ID)});
返回true;
} 公共无效deleteContact(){
SQLiteDatabase分贝= this.getWritableDatabase();
db.delete(联系人,NULL,NULL);
db.close();
} 公共无效deleteSingleContact(字符串名称){ SQLiteDatabase分贝= this.getWritableDatabase();
db.delete(CONTACTS_TABLE_NAME,CONTACTS_COLUMN_TITLE +=?,新的String [] {标题});
// KEY_NAME是一个列名
} 公共布尔checkForTables(){
布尔hasRows = FALSE;
SQLiteDatabase分贝= getReadableDatabase();
(FROM SELECT COUNT(*)+ CONTACTS_TABLE_NAME,NULL)光标光标= db.rawQuery;
cursor.moveToFirst();
诠释计数= cursor.getInt(0);
如果(计数大于0)
hasRows = TRUE;
db.close();
返回hasRows;
}
公众的ArrayList< ContactListItems> getAllContacts(){
ArrayList的< ContactListItems> contactList =新的ArrayList<>();
HP =新的HashMap();
SQLiteDatabase分贝= this.getReadableDatabase();
光标解析度= db.rawQuery(从通讯录中选择*,NULL);
res.moveToFirst();
而(!res.isAfterLast()){
ContactListItems contactListItems =新ContactListItems(); contactListItems.setTitle(res.getString(RES
.getColumnIndex(标题)));
contactListItems.setAmount(res.getFloat(RES
.getColumnIndex(额)));
contactListItems.setDescription(res.getString(RES
.getColumnIndex(说明)));
contactList.add(contactListItems);
res.moveToNext();
}
res.close();
返回contactList;
}
公众诠释getTotalOfAmount(){
SQLiteDatabase分贝= this.getReadableDatabase();
光标C = db.rawQuery(SELECT SUM(数量)FROM+ CONTACTS_TABLE_NAME,NULL);
c.moveToFirst();
INT I = c.getInt(0);
c.close();
返回我;
}
}
修改
obj.setOnItemLongClickListener(新AdapterView.OnItemLongClickListener(){
@覆盖
公共布尔onItemLongClick(适配器视图<>为arg0,ARG1观,诠释ARG2,长ARG3){
deleteDialog();
返回true;
}
});
}
logcat的错误:
android.database.sqlite.SQLiteException:近=:语法错误(code1):,在编译:删除联系人WHERE标题=\r
在android.database.sqlite.SQLiteConnection.native prepareStatement(本机方法)\r
在android.database.sqlite.SQLiteConnection.acquire preparedStatement(SQLiteConnection.java:882)\r
在android.database.sqlite.SQLiteConnection。prepare(SQLiteConnection.java:493)\r
在android.database.sqlite.SQLiteSession。prepare(SQLiteSession.java:588)\r
在android.database.sqlite.SQLiteProgram<&初始化GT;(SQLiteProgram.java:58)\r
在android.database.sqlite.SQLiteStatement<&初始化GT;(SQLiteStatement.java:31)\r
在android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)\r
在android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)\r
在com.softtech.stevekamau.buyathome.DBHelper.removeSingleContact(DBHelper.java:157)\r
在com.softtech.stevekamau.buyathome.MyCart $ 6.onClick(MyCart.java:140)\r
在com.android.internal.app.AlertController $ ButtonHandler.handleMessage(AlertController.java:166)\r
在android.os.Handler.dispatchMessage(Handler.java:99)\r
在android.os.Looper.loop(Looper.java:137)\r
在android.app.ActivityThread.main(ActivityThread.java:4745)\r
在java.lang.reflect.Method.invokeNative(本机方法)\r
在java.lang.reflect.Method.invoke(Method.java:511)\r
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)\r
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)\r
在dalvik.system.NativeStart.main(本机方法)
\r
您可以使用SQL DELETE语句来选择要删除的条目。
当使用字符串值作为选择,确保你在括值''
。
/ **
*删除由标题从数据库中的联系人
*
* @参数标题去掉
* /
公共无效removeSingleContact(字符串名称){
//打开数据库
SQLiteDatabase数据库= this.getWritableDatabase(); //执行SQL查询,以便从数据库中删除
//注意:当字符串在SQL删除,值必须以括'
database.execSQL(DELETE FROM+ TABLE_NAME +WHERE+ CONTACTS_COLUMN_TITLE +='+标题+'); //关闭数据库
database.close();
}
然后,每当你想从数据库中删除条目使用下列内容:
DBHelper dbHelper =新DBHelper(背景);
dbHelper.removeSingleContact(CONTACT_TO_REMOVE_HERE);
更新
假设你的的ListView
集是的ArrayList
包含ContactListItems,你可以设置一个 OnItemClickListener
您的ListView
,并用它来获得您所选择的标题,然后将其删除。
listView.setOnItemClickListener(新AdapterView.OnItemClickListener(){ @覆盖
公共无效onItemClick(适配器视图<>母公司,观景,最终诠释的位置,长的id){ AlertDialog.Builder alertDialog =新AlertDialog.Builder(MyCart.this);
alertDialog.setCancelable(假);
alertDialog.setMessage(删除项目?);
alertDialog.setPositiveButton(是,新DialogInterface.OnClickListener(){
公共无效的onClick(DialogInterface对话,诠释它){
字符串称号; 标题= arrayList.get(位置).getTitle(); dbHelper.removeSingleContact(职称); //更新您的ArrayList
ArrayList的= dbHelper.getAllContacts(); //通知您的适配器的ListView
adapter.notifyDataSetChanged(); }
});
alertDialog.setNegativeButton(取消,新DialogInterface.OnClickListener(){
公共无效的onClick(DialogInterface对话,诠释它){
dialog.cancel();
}
});
alertDialog.show(); }});
I have sqlite
data represented on a ListView
by a CustomListAdapter
.On clicking a row an alert dialogue
pops up that prompts the user to delete the single row from sqlite
in my activity:
private void deleteDialog() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MyCart.this);
alertDialog.setCancelable(false);
alertDialog.setMessage("Delete item?");
alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
myDb.deleteSingleContact(toString());
}
});
alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog.show();
}
On my DBHelper.java:
public void deleteSingleContact(String title){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(CONTACTS_TABLE_NAME, CONTACTS_COLUMN_TITLE + "=?", new String[]{title});
//KEY_NAME is a column name
}
However the above code doesn't delete anything.I guess its the function i havent done correctly.Any suggestions?
Full DBHelper.java
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "MyDBName.db";
public static final String CONTACTS_TABLE_NAME = "contacts";
public static final String CONTACTS_COLUMN_ID = "id";
public static final String CONTACTS_COLUMN_TITLE = "title";
public static final String CONTACTS_COLUMN_AMOUNT = "amount";
public static final String CONTACTS_COLUMN_DESC = "description";
private HashMap hp;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(
"create table contacts " +
"(id integer primary key, title text,amount float,description text)"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS contacts");
onCreate(db);
}
public boolean insertContact(String title, float amount, String description) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("title", title);
contentValues.put("amount", amount);
contentValues.put("description", description);
db.insert("contacts", null, contentValues);
return true;
}
public Cursor getData(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from contacts where id=" + id + "", null);
return res;
}
public int numberOfRows() {
String countQuery = "SELECT * FROM " + CONTACTS_TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int cnt = cursor.getCount();
cursor.close();
return cnt;
}
public boolean updateContact(Integer id, String title, float amount, String description) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("title", title);
contentValues.put("amount", amount);
contentValues.put("description", description);
db.update("contacts", contentValues, "id = ? ", new String[]{Integer.toString(id)});
return true;
}
public void deleteContact() {
SQLiteDatabase db = this.getWritableDatabase();
db.delete("contacts", null, null);
db.close();
}
public void deleteSingleContact(String title){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(CONTACTS_TABLE_NAME, CONTACTS_COLUMN_TITLE + "=?", new String[]{title});
//KEY_NAME is a column name
}
public boolean checkForTables() {
boolean hasRows = false;
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM " + CONTACTS_TABLE_NAME, null);
cursor.moveToFirst();
int count = cursor.getInt(0);
if(count > 0)
hasRows = true;
db.close();
return hasRows;
}
public ArrayList<ContactListItems> getAllContacts() {
ArrayList<ContactListItems> contactList = new ArrayList<>();
hp = new HashMap();
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from contacts", null);
res.moveToFirst();
while (!res.isAfterLast()) {
ContactListItems contactListItems = new ContactListItems();
contactListItems.setTitle(res.getString(res
.getColumnIndex("title")));
contactListItems.setAmount(res.getFloat(res
.getColumnIndex("amount")));
contactListItems.setDescription(res.getString(res
.getColumnIndex("description")));
contactList.add( contactListItems);
res.moveToNext();
}
res.close();
return contactList;
}
public int getTotalOfAmount(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor c=db.rawQuery("SELECT SUM(amount) FROM " +CONTACTS_TABLE_NAME,null);
c.moveToFirst();
int i=c.getInt(0);
c.close();
return i;
}
}
EDIT
obj.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
deleteDialog();
return true;
}
});
}
Logcat Error:
android.database.sqlite.SQLiteException: near "=": syntax error (code 1): , while compiling: DELETE FROM contacts WHERE title=
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
at com.softtech.stevekamau.buyathome.DBHelper.removeSingleContact(DBHelper.java:157)
at com.softtech.stevekamau.buyathome.MyCart$6.onClick(MyCart.java:140)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
You can use SQL DELETE statement to choose which entry you want to delete.
When using a string value as the selector, make sure you enclose the value in ''
.
/**
* Remove a contact from database by title
*
* @param title to remove
*/
public void removeSingleContact(String title) {
//Open the database
SQLiteDatabase database = this.getWritableDatabase();
//Execute sql query to remove from database
//NOTE: When removing by String in SQL, value must be enclosed with ''
database.execSQL("DELETE FROM " + TABLE_NAME + " WHERE " + CONTACTS_COLUMN_TITLE + "= '" + title + "'");
//Close the database
database.close();
}
Then whenever you want to remove an entry from the database use the following:
DBHelper dbHelper = new DBHelper(context);
dbHelper.removeSingleContact("CONTACT_TO_REMOVE_HERE");
UPDATE
Assuming that your ListView
dataset is an ArrayList
containing ContactListItems, you can set an OnItemClickListener
for your ListView
and use it to get your selected title, and then remove it.
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MyCart.this);
alertDialog.setCancelable(false);
alertDialog.setMessage("Delete item?");
alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String title;
title = arrayList.get(position).getTitle();
dbHelper.removeSingleContact(title);
//Update your ArrayList
arrayList = dbHelper.getAllContacts();
//Notify your ListView adapter
adapter.notifyDataSetChanged();
}
});
alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog.show();
}
});
这篇关于如何删除的android源码单行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!