2012-12-05 47 views
2

我试图创建SQLiteDatabase保存我从JSONObject从发布请求中获取的数据。 我的主类:继续收到“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(); 
      } 

     } 

} 

我不能调试。当我在MainActivity中创建Cursor时,我在线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

嗯。没有这样的表是关于该问题的好消息:) –

相关问题