2012-12-05 5 views
2

게시 요청에서 JSONObject에서 가져온 데이터를 유지하기위한 SQLiteDatabase를 만들려고합니다. 내 주요 클래스 :계속 "SQLiteException : 해당 테이블이 없습니다"예외

public class MainActivity extends Activity { 

    static JSONObject result; 
    public Context mContext; 
    public SQLiteDatabase db; 

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

     mContext = getApplicationContext(); 
     new UpdateData().execute(); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    private class UpdateData extends AsyncTask<String, Void, JSONObject>{ 

     private JSONObject object; 
      @Override 
      protected JSONObject doInBackground(String... params) { 
       try { 
        HttpClient client = new DefaultHttpClient(); 
        String postURL = "http://test.com"; 
        HttpPost post = new HttpPost(postURL); 
         List<NameValuePair> crc = new ArrayList<NameValuePair>(); 
         crc.add(new BasicNameValuePair("crc", "test")); 
         UrlEncodedFormEntity ent = new UrlEncodedFormEntity(crc,HTTP.UTF_8); 
         post.setEntity(ent); 
         HttpResponse responsePOST = client.execute(post); 
         HttpEntity entit = responsePOST.getEntity(); 
         String retSrc = EntityUtils.toString(entit); 
         object = new JSONObject(retSrc); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       return object; 
      } 
      @Override 
      protected void onPostExecute(JSONObject result) { 
       MainActivity.this.result = result; 
       DataBase dbHelper = new DataBase(mContext) ; 
       db = dbHelper.getWritableDatabase(); 
       dbHelper.createDB(db, result); 
       /*Cursor cursor = db.query("departments", null , null, 
         null, null, null, null, null); 
       System.out.println(cursor.getString(1));*/ 
       } 

    } 
} 

및 DataBaseHelper는

public class DataBaseHelper extends SQLiteOpenHelper { 

    public boolean isDownloaded = false; 
    public boolean shutdown = false; 

    private Context mContext; 
    private JSONObject exams; 
    private JSONObject specs; 
    private JSONObject deps; 

    private static final int DATABASE_VERSION = 2; 
    private static final String DATABASE_NAME = "data.db"; 

    private static final String EXAMS_TABLE_NAME = "exams"; 
    private static final String EXAMS_TABLE_CREATE = 
       "CREATE TABLE " + EXAMS_TABLE_NAME + " (" + 
       "id VARCHAR (255), " +    //0 
       "name VARCHAR (255)," +    //1 
       "type VARCHAR (100)," +    //2 
       "level VARCHAR (100)," + ");" ; //3 


    private static final String SPEC_TABLE_NAME = "specializations"; 
    private static final String SPEC_TABLE_CREATE = 
       "CREATE TABLE " + SPEC_TABLE_NAME + " (" + 
       "id VARCHAR (255), " +     //0 
       "name VARCHAR (255)," +     //1 
       "name_en VARCHAR (255)," +   //2 
       "description VARCHAR (255)," + ");" ;  //3 

    private static final String DEP_TABLE_NAME = "departments"; 
    private static final String DEP_TABLE_CREATE = 
       "CREATE TABLE " + DEP_TABLE_NAME + " (" + 
       "id VARCHAR (255), " +     //0 
       "name VARCHAR (255)," +     //1 
       "name_en VARCHAR (255)," +   //2 
       "www VARCHAR (255)," +     //3 
       "email VARCHAR (255)," +    //4 
       "phone VARCHAR (100)," + ");" ;  //5 



    public DataBase(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     mContext = context; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 

    } 

    public boolean doesDBexist() { 
     File db; 
     db = new File("/data/data/my.package/databases/data.db"); 
     return db.exists(); 
    } 

    public boolean createDB(SQLiteDatabase db, JSONObject jsonObject) { 
     try { // if not working create new one 
      exams = jsonObject.getJSONObject("exams"); 
      specs = jsonObject.getJSONObject("spec"); 
      deps = jsonObject.getJSONObject("department"); 
      db.execSQL(EXAMS_TABLE_CREATE);    // here I get exception (described below) 
      db.execSQL(SPEC_TABLE_CREATE); 
      db.execSQL(DEP_TABLE_CREATE); 
      putContentValues(db); 
      isDownloaded = true; 
      return true; 
     } catch (SQLiteException e1) { 
      db = null; 
      return false; 
     } catch (Exception e3) { 
      shutdown = true; 
      return false; 
     } 
    } 


     public void putContentValues(SQLiteDatabase db) throws JSONException { 
      ContentValues cv = new ContentValues(); 

      for (Iterator<String> it = exams.keys(); it.hasNext(); it.next()) { 
       JSONObject exam = exams.getJSONObject(it.toString()); 
       cv.put("id", it.toString()); 
       cv.put("name", exam.getString("name")); 
       cv.put("type", exam.getString("type")); 
       cv.put("level", exam.getString("level")); 
       db.insert(EXAMS_TABLE_NAME, null, cv); 
       cv.clear(); 

      } 

      for (Iterator<String> it = specs.keys(); it.hasNext(); it.next()) { 
       JSONObject spec = specs.getJSONObject(it.toString()); 
       cv.put("id", it.toString()); 
       cv.put("name", spec.getString("name")); 
       cv.put("name_en", spec.getString("name_en")); 
       cv.put("desription", spec.getString("desription")); 

       db.insert(SPEC_TABLE_NAME, null, cv); 
       cv.clear(); 
      } 

      for (Iterator<String> it = deps.keys(); it.hasNext(); it.next()) { 
       JSONObject dep = deps.getJSONObject(it.toString()); 
       cv.put("id", it.toString()); 
       cv.put("name", dep.getString("name")); 
       cv.put("name_en", dep.getString("name_en")); 
       cv.put("www", dep.getString("www")); 
       cv.put("email", dep.getString("email")); 
       cv.put("phone", dep.getString("phone")); 
       db.insert(DEP_TABLE_NAME, null, cv); 
       cv.clear(); 
      } 

     } 

} 

나는 그것을 디버깅 할 수 없습니다. MainActivityCursor을 만들면 db.execSQL(EXAMS_TABLE_CREATE);android.database.sqlite.SQLiteException: no such table: departments: , while compiling: SELECT * FROM departments 예외가 발생하며 커서를 만들지 않으면 디버깅하는 동안 커서가 멈 춥니 다. 내 데이터베이스에 무엇이 있는지 그리고 그것이 핵심적으로 만들어 졌는지는 확인할 수 없습니다. 다른 사람이이 질문에서 말한 것처럼 내 데이터베이스의 이름을 바꾸려고했습니다 : android.database.sqlite.SQLiteException: no such table 그러나이 문제는 해결되지 않았습니다.

+0

sqlite 내부의 데이터베이스를보고 테이블이 생성되고 테이블 생성 스크립트가 제대로 작동하는지 확인 했습니까? – CBredlow

답변

6

정확하지 않을 수 :

"CREATE TABLE " + EXAMS_TABLE_NAME + " (" + 
      "id VARCHAR (255), " +    //0 
      "name VARCHAR (255)," +    //1 
      "type VARCHAR (100)," +    //2 
      "level VARCHAR (100)," + ");" ; 

가 생성 문에 ","마지막을 제거하고 다시 시도하십시오.

btw ... 모든 작성 문에서 오류가 발생했습니다.

+0

물론 당신 말이 맞습니다. 그러나이 경우 쿼리가 올바르지 않은 테이블을 만드는 동안 예외가 없어야하는지 궁금합니다. –

+0

대단히 감사합니다. 그것은 어리석은 실수 였어. – dziwna

+0

흠. 그런 테이블은 그 prob에 관한 좋은 메시지입니다 :) –

관련 문제