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

no such table 계속이게뜨는대 좀봐주세요 ㅠㅠ

0 추천

 

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;

public class Register extends Activity{
   myDBHelper myDBHelper;
   String gender="";
    String tableName="Lo";
    int dbMode= Context.MODE_PRIVATE;
    SQLiteDatabase db1;
    //String Cname, Cpassword;
    //String array[]=new String[2];//id password;
    @Override
    protected void  onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        final EditText idText,passwordText,emailText;
        Button registerButton;
        RadioButton genderMan,genderWoman;
        idText=(EditText)findViewById(R.id.idText);
        passwordText=(EditText)findViewById(R.id.passwordText);
        emailText=(EditText)findViewById(R.id.emailText);
        genderMan=(RadioButton)findViewById(R.id.genderMan);
        genderWoman=(RadioButton)findViewById(R.id.genderWoman);
        registerButton=(Button)findViewById(R.id.registerButton);
        try{
        if(db1==null){
            myDBHelper=new myDBHelper(getApplicationContext(),"dbName01.db",null,1) ;
            db1=myDBHelper.getWritableDatabase();}
            else if(db1!=null){
            db1.execSQL("CREATE TABLE if not exists " +tableName+"("+
                    "_id integer PRIMARY KEY autoincrement," +
                    "name text not null," +
                    "pass text not null," +
                    "email text not null," +
                    "gender text not null" +
                    ")");
        }
        }catch (Exception e){
            e.printStackTrace();
        }
        genderMan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                gender="청각장애인";
            }
        });
        genderWoman.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                gender="일반인";
            }
        });
        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try{
                    if(gender.equals("")){
                        Toast.makeText(getApplicationContext(),"유형을클릭하여주세요",Toast.LENGTH_LONG).show();
                        return ;
                    }
                    db1=myDBHelper.getWritableDatabase();
                    db1.execSQL("INSERT INTO " + tableName + "(name,pass,email,gender)VALUES(" +
                            "'"+idText.getText().toString()+"'," + 
                            "'"+passwordText.getText().toString()+"','"+emailText.getText().toString()+"'," +
                            "'"+gender.toString()+"')");
                    Intent intent=new Intent(getApplicationContext(),Login.class);
                    Toast.makeText(getApplicationContext(),idText.getText().toString()+"님 회원가입이완료되었습니다",Toast.LENGTH_LONG).show();
                    startActivity(intent);
                        db1.close();
              
                    }catch (Exception e){
                    e.printStackTrace();
                }
                }
        });
    }
    public class myDBHelper extends SQLiteOpenHelper{
      myDBHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){
          super(context,name,factory,version);
      }
        @Override
        public void onOpen(SQLiteDatabase db) {
            super.onOpen(db);
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
         }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            /*db.execSQL("DROP TABLE IF EXISTS tableName");
            onCreate(db);*/
        }
    }
}
E/SQLiteLog: (1) no such table: Lo
W/System.err:at com.example.minjae.myapplication.Login$1.onClick(Login.java:37)
creat 로 테이블을 만들려고하는데 계속해서 no such 에러가 뜹니다.. 어떻게 해야할지 잘모르겠어요.. 
ckdals233 (160 포인트) 님이 2018년 1월 17일 질문
ckdals233님이 2018년 1월 17일 수정

1개의 답변

0 추천
소스를 보면 테이블 생성문은 Registerd의 onCreate() 에서 db1이 null 이 아닐때 실행하게 되어 있는데, onCreate() 에서 db1을 체크하면 db1 은 항상 null 입니다. 그러니 테이블 생성문은 실행이 안되고 테이블이 존재하지 않는 것입니다.

그리고, 보통 CREATE 문은 myDBHelper의 onCreate() 에서 하는 것으로 알고 있습니다.
눈빛 (4,120 포인트) 님이 2018년 1월 17일 답변
아 덕분에 무슨말인지 이제야 이해가 됬습니다 감사해요 ^^ㅋ
...