Java SQlite delete函数没有删除条目
在我的应用程序正在使用的数据库中,我很难删除单个项目。我知道该方法会被调用,但列表中的任何内容都不会被删除。我没有收到任何使追踪变得困难的错误。援助将是了不起的Java SQlite delete函数没有删除条目,java,android,Java,Android,在我的应用程序正在使用的数据库中,我很难删除单个项目。我知道该方法会被调用,但列表中的任何内容都不会被删除。我没有收到任何使追踪变得困难的错误。援助将是了不起的 public class MainActivity extends Activity{ //Global Variables ListView lv; Intent addM, viewM; public DBAdapter movieDatabase; String tempTitle, tempYear; int request_
public class MainActivity extends Activity{
//Global Variables
ListView lv;
Intent addM, viewM;
public DBAdapter movieDatabase;
String tempTitle, tempYear;
int request_Code = 1;
int request_code2 = 2;
SimpleCursorAdapter dataAdapter;
Cursor cursor;
Button addButton;
long testID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//creates the database
movieDatabase = new DBAdapter(this);
movieDatabase.open();
//movieDatabase.deleteAllMovies();
//creates the intents to start the sub activities
addM = new Intent(this, AddMovie.class);
viewM = new Intent(this, MovieView.class);
}
//handles the return of the activity addMovie
public void onActivityResult(int requestCode, int resultCode,
Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK)
{
switch(requestCode)
{
case 1:
dbAddMovie(data.getStringExtra("title"),
data.getStringExtra("year"));
break;
case 2:
testID = data.getLongExtra("rowid", -1);
dMovie(testID);
break;
}
}
}
//adds item to the movie list
public void dbAddMovie(String mT, String mY)
{
movieDatabase.open();
movieDatabase.insertMovie(mT, mY);
Toast.makeText(this, "Movie: " + mT + " added to database",
Toast.LENGTH_SHORT).show();
}
//deletes an entry into the database
public void dMovie(long rowid)
{
//Toast.makeText(this, "Deleting: " + rowid,
Toast.LENGTH_SHORT).show();
movieDatabase.deleteMovie(rowid);
movieDatabase.getAllMovies();
}
//displays the database as a list
public void displayListView()
{
addButton = (Button) findViewById(R.id.add);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(addM, 1);
}
});
cursor = movieDatabase.getAllMovies();
//columns to use
String[] columns = new String[]
{
movieDatabase.KEY_TITLE,
};
//xml data to bind the data to
int[] to = new int[]
{
R.id.column2,
};
//adapter to display the database as a list
dataAdapter = new SimpleCursorAdapter(this,
R.layout.complexrow, cursor, columns, to, 0);
//gets the List view resource
lv = (ListView) findViewById(R.id.movielist);
//sets the list view to use the adapter
lv.setAdapter(dataAdapter);
//handles the list click events
lv.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View
v, int position,
long id) {
Cursor cursor = (Cursor)
parent.getItemAtPosition(position);
Bundle mDet = new Bundle();
mDet.putString("title",
cursor.getString(cursor.getColumnIndex(movieDatabase.KEY_TITLE)));
mDet.putString("year",
cursor.getString(cursor.getColumnIndex(movieDatabase.KEY_YEAR)));
mDet.putInt("rId", position);
viewM.putExtras(mDet);
startActivityForResult(viewM, 2);
}
});
//dataAdapter.notifyDataSetChanged();
}
public void onResume()
{
super.onResume();
displayListView();
}
}
我假设
KEY\u ROWID
实际上是列的名称?请尝试以下操作:
public boolean deleteMovie(long rowID)
{
return db.delete(DATABASE_TABLE, KEY_ROWID + "=?", new String[] { String.valueOf(rowID) }) >-1;
}
我假设
KEY\u ROWID
实际上是列的名称?请尝试以下操作:
public boolean deleteMovie(long rowID)
{
return db.delete(DATABASE_TABLE, KEY_ROWID + "=?", new String[] { String.valueOf(rowID) }) >-1;
}
- 您正在使用从listview返回的
作为数据库中的行id。这不一定与数据库中自动递增的位置
匹配<代码>位置就是它在列表中的位置“\u id”
- 您可能需要考虑使用
作为您想要的密钥。现在我看到了movieDatabase.KEY\u ROWID
,“rowid”
,“rId”
,和“id”
的混合。当引用同一事物时,在任何地方使用相同的键都会使事情变得简单键rowid
- 看起来您一直在向
intent添加捆绑包。这是真的吗?如果这不是您的意图,您应该为每次单击创建一个新的意图,或者首先删除以前的捆绑包viewM
- 您正在使用从listview返回的
作为数据库中的行id。这不一定与数据库中自动递增的位置
匹配<代码>位置就是它在列表中的位置“\u id”
- 您可能需要考虑使用
作为您想要的密钥。现在我看到了movieDatabase.KEY\u ROWID
,“rowid”
,“rId”
,和“id”
的混合。当引用同一事物时,在任何地方使用相同的键都会使事情变得简单键rowid
- 看起来您一直在向
intent添加捆绑包。这是真的吗?如果这不是您的意图,您应该为每次单击创建一个新的意图,或者首先删除以前的捆绑包viewM
testID
/rowid
的值是多少?它取决于我单击的元素。我在dMovie中有一个toast项,它将根据我单击的内容返回值。范围从0(如果我一直点击列表中的第一项)到最后一项。您可以从DBAdapter类中发布更多的代码吗?我假设它扩展了SQLiteOpenHelper?最重要的是,你是在调用getWritableDatabase(),而不是getReadableDatabase()?用我的整个班级编辑原始问题你说你知道它会被调用。。。调用时,testID
/rowid
的值是多少?它取决于我单击的元素。我在dMovie中有一个toast项,它将根据我单击的内容返回值。范围从0(如果我一直点击列表中的第一项)到最后一项。您可以从DBAdapter类中发布更多的代码吗?我假设它扩展了SQLiteOpenHelper?最重要的是,您是在调用getWritableDatabase(),而不是getReadableDatabase()?用我的整个Classic编辑原始问题我刚刚注意到类似的情况。我卸载了应用程序并重新安装了它。我点击了一个项目,是我列表中的第三个。它应该是rowid3,我点击delete,它删除了rowid0处的项目,现在不会再这样做了,所以我认为这是其中的一部分。+1,很好的建议。第一点尤其关键。onItemClick甚至为您提供了一个ID,由于您使用的是SimpleCursorAdapter,它应该为您提供数据库中相应的ID。因此,替换mDet.putin(“rId”,位置)代码>带有mDet.putLong(“rId”,id)代码>。我刚刚注意到类似的事情。我卸载了应用程序并重新安装了它。我点击了一个项目,是我列表中的第三个。它应该是rowid3,我点击delete,它删除了rowid0处的项目,现在不会再这样做了,所以我认为这是其中的一部分。+1,很好的建议。第一点尤其关键。onItemClick甚至为您提供了一个ID,由于您使用的是SimpleCursorAdapter,它应该为您提供数据库中相应的ID。因此,替换mDet.putin(“rId”,位置)代码>带有mDet.putLong(“rId”,id)代码>。