안드로이드 개발 질문/답변
(글 수 45,052)
SQLiteOpenHelper에서 Update, Delete가 됐다 안됐다 합니다. 원인을 모르겠습니다.
package com.android.demo.notepad1;
import android.app.Activity;
import android.database.Cursor;
import android.database.SQLException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class NotePadTest extends Activity {
/** Called when the activity is first created. */
private NotesDbAdapter dbAdapter;
private TextView tv1, tv2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dbAdapter = new NotesDbAdapter(this);
dbAdapter.open();
tv1 = (TextView) findViewById(R.id.title_textview);
tv2 = (TextView) findViewById(R.id.body_textview);
Button createButton = (Button)findViewById(R.id.create_button);
createButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dbAdapter.createTable();
}
});
Button dropButton = (Button)findViewById(R.id.drop_button);
dropButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
dbAdapter.dropTable();
showToast("테이블 삭제 완료");
}
catch(SQLException e)
{
showToast("테이블 삭제 오류");
}
}
});
Button insertButton = (Button)findViewById(R.id.insert_button);
insertButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dbAdapter.createNote("text", "body");
}
});
Button selectButton = (Button) findViewById(R.id.select_button);
selectButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv1.setText("");
tv2.setText("");
Cursor cursor = dbAdapter.fetchAllNotes();
cursor.moveToFirst();
while(!cursor.isAfterLast())
{
String text = cursor.getString(1);
String body = cursor.getString(2);
tv1.append(text);
tv2.append(body);
cursor.moveToNext();
}
cursor.close();
}
});
Button updateButton = (Button)findViewById(R.id.update_button);
updateButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv1.setText("");
tv2.setText("");
Cursor cursor = dbAdapter.fetchAllNotes();
cursor.moveToFirst();
dbAdapter.updateNote(cursor.getCount() - 1, "xx", "yy");
while(!cursor.isAfterLast())
{
String text = cursor.getString(1);
String body = cursor.getString(2);
tv1.append(text);
tv2.append(body);
cursor.moveToNext();
}
cursor.close();
}
});
Button deleteButton = (Button)findViewById(R.id.delete_button);
deleteButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv1.setText("");
tv2.setText("");
Cursor cursor = dbAdapter.fetchAllNotes();
cursor.moveToFirst();
boolean result = dbAdapter.deleteNote(cursor.getCount() - 1);
Log.i("delete work : ", result == true ? "succeed" : "fail");
Log.i("cursor count : ", new Integer(cursor.getCount()).toString());
while(!cursor.isAfterLast())
{
String text = cursor.getString(1);
String body = cursor.getString(2);
tv1.append(text);
tv2.append(body);
cursor.moveToNext();
}
cursor.close();
}
});
}
private void showToast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_LONG);
}
}
로그캣으로 보면 Succeed가 될때는 Fail했던 Index를 제외하고 신규 RowID의 데이터만 삭제가 됩니다.
AutoIncrement가 이상한 것인지 전혀 원인을 모르겠습니다.
이상하게도 Delete가 작동되는 확률이 반반입니다.
조언 좀 해주세요. 위 예제 코드로 저만 그런건지도 좀 알고 싶습니다.
풀소스(프로젝트)는 첨부파일에 있습니다. 시간되시면 한 번 받아서 돌려봐주시고 답변 좀 부탁드립니다.