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

데이터베이스 변수 값 삽입 문제입니다! 조언 부탁드려요

0 추천

이름을 입력하는 edittext의 값을 읽어오고,

성별을 선택하는 radiogroup 내의 radiobutton의 값을 읽어와서

그 두 값을 데이터베이스에 삽입하고 싶습니다..

데이터베이스를 열고, 테이블을 만드는 것까지는 되는데 값 넣는 곳에서 오류가 납니다ㅠㅠㅠㅠ

해결 방법 알려주시면 정말 정말 감사하겠습니다!

 

public class MainActivity extends AppCompatActivity {

    Button m_btnOpenDB;
    TextView m_txtLog;
    EditText m_edtDbname;
    String m_szDatabase;
    SQLiteDatabase m_database;

    EditText m_edtTableName;
    String m_szTableName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        m_btnOpenDB = (Button)findViewById(R.id.btnOpenDB);
        m_txtLog = (TextView)findViewById(R.id.txtLog);
        m_edtDbname = (EditText)findViewById(R.id.edtDbname);
        m_edtTableName = (EditText)findViewById(R.id.edtTableName);
    }

    public void onBtnDbOpenClicked(View v){
        m_szDatabase = m_edtDbname.getText().toString();

        try{
            m_database = openOrCreateDatabase(m_szDatabase, Context.MODE_PRIVATE, null);
            AppendLog(m_szDatabase + " is created.");
        } catch (Exception e) {
        }
    }

    private void AppendLog(String msg) {
        m_txtLog.append(msg + "\n");
    }

    public void onBtnCreateTableClicked(View v){
        m_szTableName = m_edtTableName.getText().toString();

        try{
            if (m_database != null) {
                m_database.execSQL("CREATE TABLE " + m_szTableName + " ("
                        + " _id integer PRIMARY KEY autoincrement, "
                        + "name text, "
                        + "gender text"
                        + ");" );
                AppendLog(m_szTableName + " is created.");
            }
            else {
                AppendLog("Please, create Database first.");
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void onBtnAppendDataClicked(View v){
        EditText m_name = (EditText)findViewById(R.id.name);
        RadioGroup rg_gender = (RadioGroup)findViewById(R.id.radiogroup);
        RadioButton rb_male = (RadioButton)findViewById(R.id.male);
        RadioButton rb_female = (RadioButton)findViewById(R.id.female);
        String str_gender = "";
        String sz_name = m_name.getText().toString();

        if(m_szTableName == null)
            m_szTableName = m_edtTableName.getText().toString();

        if(rg_gender.getCheckedRadioButtonId() == R.id.male) {
            str_gender = rb_male.getText().toString();
        } else if (rg_gender.getCheckedRadioButtonId() == R.id.female) {
            str_gender = rb_female.getText().toString();
        }

        try{
            if(m_database != null){
                m_database.execSQL("insert into " + m_szTableName
                                    + " values ('"+sz_name+"','"+str_gender+"');");
                AppendLog("Record is appended.");
            }
            else {
                AppendLog("Please, open the Database first.");
            }
        } catch(Exception e){
            e.printStackTrace();
        }
    }
샐리 (440 포인트) 님이 2016년 10월 14일 질문

1개의 답변

0 추천
vc 하다가 전향하셨는지 왜케 java 에서 vc 코드 냄새가 폴폴 납니다.

일단 insert 문에 _id 를 빼 먹으셨네요 values 뒤에 안넣기 위해서 는 field name 을 지정해줘야 합니다.

INSERT INTO TABLE ('name', 'gender') VALUES ('$name', '$gender');

식으로 말이죠
aucd29 (218,390 포인트) 님이 2016년 10월 14일 답변
...