마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안녕하세요 안드로이드 SQLIte 재질문드립니다. ㅠㅠ

0 추천
sqlDB = myHelper.getWritableDatabase();
    sqlDB.execSQL("INSERT INTO groupTBL VALUES('"+edtName.getText().toString()+"', "+edtAge.getText().toString()+");");
    sqlDB.close();
    Toast.makeText(getApplicationContext(), "입력됨", Toast.LENGTH_LONG).show();
    
    Intent save = new Intent(MainActivity.this, SubActivity.class);
    startActivity(save);

이름과 나이를 저장하고 

editText1 = (EditText) findViewById(R.id.editText1);
  editText2 = (EditText) findViewById(R.id.editText2);
  
  sqlDB = myHelper.getReadableDatabase();
  Cursor cursor;
  cursor = sqlDB.rawQuery("SELECT * FROM groupTBL;", null);
  
  String strName = "이름 : ";
  String strAge = "나이 : ";
  
  while(cursor.moveToNext()) {
   strName += cursor.getString(0);
   strAge += cursor.getString(1);
  }
  
  editText1.setText(strName);
  editText2.setText(strAge);
  
  cursor.close();
  sqlDB.close();

다른 액티비티에 이름과 나이를 출력했는데요.. 

버튼을 클릭하면 저장이 되고 그 정보를 수정할수 있게끔 만들고 싶은데

이름과 나이를 입력하고 버튼을 누르면 똑같은 정보일시 어플이 중지되고

다른 정보를 입력하면 추가가 되거든요 1명의 정보만 받고 수정하고 싶은데

여기서 어떻게해야하는지 감이 안잡히네요

조언좀 부탁드립니다. ㅠㅠ

개인 정보를 저장하고 수정할수 있게 만들려고하는데요

 

maedduk (180 포인트) 님이 2015년 7월 23일 질문

2개의 답변

0 추천
우선 1명의 정보만 받고 수정하고 싶다 하셨는데.

그렇다면 1개의 Row만 가지는 테이블을 원하시는 것인지요?

일단 추가인지 수정인를 먼저 구분하셔야 할듯합니다.

우선은 Insert 인제 Update인지를 구분하기위해서는

이름과 나이로 검색하세요

Select * from groupTBL Where 이름필드명='strName' And 나이필드명='strAge';

해서 검색결과가 없으면 Insert 있다면 Update를 사용해야겠지요

Update groupTBL set 이름필드명='strNewName', 나이필드명='strNewAge' where 이름필드명='strOldName' And 나이필드명='strOldAge'
컴러기 (22,230 포인트) 님이 2015년 7월 23일 답변
if("SELECT * FROM groupTBL WHERE gName='strName' && gAge='strAge'" =="") {
                    sqlDB.execSQL("INSERT INTO groupTBL VALUES('"
                            + edtName.getText().toString() + "', "
                            + edtAge.getText().toString() + ");");
               
                sqlDB.close();
                Toast.makeText(getApplicationContext(), "수정됨",
                        Toast.LENGTH_SHORT).show();
                } else {
                Intent save = new Intent(MainActivity.this, SubActivity.class);
                startActivity(save);
                } 해서 저장을 하면 저장이 되지않고 그냥 넘어갑니다 왜그럴까요 ㅠㅠ
오류는 않나요?
LogCat에 오류 없으시다면 sql문에 이상이 있을수도 있으니 sqliteadmin 같은 툴을 이용해서 sql문에 이상이 없는지 따로 먼저 확인하시는 방법도 있습니다.
지금 현재로선 groupTBL의 구조를 모르니 일단 두개의 필드 gName text, gAGE integer로 이루어 졋다고 가졍했을때 특별히 문제가 있을만 항목은 없는 듯보이긴합니다.
일단은 sqlDB가 getWriteable.. 로 정확히 만들어졌는지도 확인하시고, logcat에 에러메세지가 나오는지도 확인하시고,
그리고 execSQL()보다는 insert() 사용해보시는 것도 추천해드립니다.
아무래도 insert() 쪽이 오류를 일으킬 확률이 적어보입니다.
0 추천
방법이야 여러개가 있겠지만, 저같으면 이렇게 할 것 같네요.

1명만 추가하고 싶을 경우 정보를 입력 후 추가 버튼 등으로 db에 insert할 때 ,

버튼이벤트에서 db조회를 합니다. [select] 이미 테이블 안에 1명이상의 데이터가 있으면 버튼을

if문등으로 더 이상 입력하지 못하게 처리하는거죵..

그리고 어플 도중에 중지되는건 에러가 발생했기 때문에 그런거니 logcat쪽을 확인해보세요
anci (19,950 포인트) 님이 2015년 7월 23일 답변
...