[英]Delete item from SQLite Database and update ListView
我試圖通過對話框菜單從列表視圖中刪除一個項目。 選擇一個項目后,我將檢索該項目的名稱,並給出一個刪除該項目名稱的選項。 但是當我嘗試刪除並重新加載listview時(請參見圖片)。 我在SQL語句中收到錯誤。
圖片: http : //i.imgur.com/zkmadGf.png
這是刪除方法:
termList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
final String termName = ((TextView) view.findViewById(R.id.tv_termName)).getText().toString();
builder.show();
builder.setAdapter(menAdapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String term = termName;
switch (which) {
case 0:
Context c = MainActivity.this;
Intent i = new Intent(c, CourseListActivity.class);
i.putExtra("termName", term);
c.startActivity(i);
break;
case 1:
db.delete("termTable", "name = " + term, null);
termListAdapter.notifyDataSetChanged();
}
}
});
}
});
這是日志文件:
04-08 14:27:00.190: E/AndroidRuntime(26451): FATAL EXCEPTION: main
04-08 14:27:00.190: E/AndroidRuntime(26451): android.database.sqlite.SQLiteException: near "Name": syntax error: , while compiling: DELETE FROM termTable WHERE name = Term Name: hello
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1759)
04-08 14:27:00.190: E/AndroidRuntime(26451): at com.dagonar.achievegpa.MainActivity$2$1.onClick(MainActivity.java:89)
04-08 14:27:00.190: E/AndroidRuntime(26451): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:938)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.widget.AdapterView.performItemClick(AdapterView.java:292)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.widget.AbsListView.performItemClick(AbsListView.java:1485)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2941)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.widget.AbsListView$1.run(AbsListView.java:3658)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.os.Handler.handleCallback(Handler.java:605)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.os.Handler.dispatchMessage(Handler.java:92)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.os.Looper.loop(Looper.java:137)
04-08 14:27:00.190: E/AndroidRuntime(26451): at android.app.ActivityThread.main(ActivityThread.java:4464)
希望您能幫助我找到解決方案。
您的目標可能是執行以下語句:
DELETE FROM termTable WHERE name = 'hello'
代替:
DELETE FROM termTable WHERE name = Term Name: hello
因此正確的代碼將是:
String term = termName.split(":")[1].trim();
switch (which) {
case 0:
Context c = MainActivity.this;
Intent i = new Intent(c, CourseListActivity.class);
i.putExtra("termName", term);
c.startActivity(i);
break;
case 1:
db.delete("termTable", "name = '" + term + "'", null);
termListAdapter.notifyDataSetChanged();
}
並且請把標簽和值分成2個TextViews
,不要將所有內容都放在一個TextView
。
將術語值視為“術語名稱:hello”,您需要的是db.delete(“ termTable”,“ name =” +“'+ term +'”,null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.