2013-05-11 137 views
0

我試圖做一個插入到這個數據庫,我會得到一個錯誤。任何想法,我會做錯什麼?這是一個空的異常錯誤,當我嘗試和加載這個片段。SQLite數據庫問題

助手類:

@Override 
public void onClick(View v) { 
    sqlDate = (EditText) getView().findViewById(R.id.dateselected); 
    sqlTemperature = (EditText) getView().findViewById(R.id.tempvalue); 
    sqlFertile = (Switch) getView().findViewById(R.id.fertileswitch); 
    sqlNotes = (EditText) getView().findViewById(R.id.chartingnote); 

    switch (v.getId()) { 
     case R.id.chartingupdate: 

      boolean success = true; 

      try{ 
      String date = sqlDate.getText().toString(); 
      String temperature = sqlTemperature.getText().toString(); 
      String fertile = sqlFertile.getText().toString(); 
      String notes = sqlNotes.getText().toString(); 

      SQLHelper entry = new SQLHelper(getActivity()); 

      entry.open(); 
      entry.createEntry(date, temperature, fertile, notes); 
      entry.close(); 
      } catch (Exception e) { 
       success = false; 

       String err_msg = e.toString(); 
       Dialog d = new Dialog(getActivity()); 
       d.setTitle("Error Inserting"); 
       TextView tv = new TextView(getActivity()); 
       tv.setText(err_msg); 
       d.setContentView(tv); 
       d.show(); 

      } finally { 
       if (success) { 
        Context context = getActivity(); 
        Toast.makeText(context, "Charting Successful", Toast.LENGTH_LONG).show(); 
       } else { 
        Context context = getActivity(); 
        Toast.makeText(context, "Charting Unsuccessful", Toast.LENGTH_LONG).show(); 
       } 
      } 

      break; 
     case R.id.pickdate: 
      Context context2 = getActivity(); 
      Toast.makeText(context2, "Hello toast 2!", Toast.LENGTH_LONG).show(); 
      break; 
    } 

} 

編輯::

public SQLHelper open() throws SQLException{ 
    ourHelper = new DbHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 
} 

錯誤說: 05-12 19:56:23.218:在另一個類中

@Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
            KEY_ROWID + " INTEGER AUTOINCREMENT, " + 
            KEY_CHARTING_DATE + " TEXT NOT NULL, " + 
            KEY_NAME + " TEXT, " + 
            KEY_CHARTING_TEMPERATURE + " INTEGER, " + 
            KEY_CHARTING_STAMPS + " INTEGER, " + 
            KEY_CHARTING_FERTILE + " TEXT, " + 
            KEY_CHARTING_NOTES + " TEXT, " + 
            KEY_CHARTING_PROC + ", " + 
            "PRIMARY KEY (" + KEY_ROWID + ", " + KEY_CHARTING_DATE + ")); " 
       ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE + ";"); 
     onCreate(db); 
    } 

public long createEntry(String date, String temperature, String fertile, String notes) { 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_CHARTING_DATE, date); 
    cv.put(KEY_CHARTING_TEMPERATURE, temperature); 
    cv.put(KEY_CHARTING_FERTILE, fertile); 
    cv.put(KEY_CHARTING_NOTES, notes); 
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 

} 

更新按鈕E/SQLiteLog(791):(1)在「AUTOINCREMENT」附近:語法錯誤

問題是我的表格創建.... PK是在兩列的。一個AUTOINCREMENT和另一個日期字段。由於某種原因,它不喜歡它。如果我將PK更改爲只有那一個AUTOINCREMENT列,它會工作......猜猜我必須將其設置爲日期字段。

+0

這將有助於 – 2013-05-11 17:46:44

+1

'ourDatabase'是否已正確初始化? – laalto 2013-05-11 17:49:12

+0

請發佈您的日誌,以便我們可以清楚瞭解您的實際錯誤。 – Rekha 2013-05-11 18:02:00

回答

1

需要聲明KEY_ROWID如果您發佈您的堆棧跟蹤爲主要

KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
0

你不提供,你初始化ourDatabase,但如果你dind't做正確的代碼,它必須是:

SQLiteDatabse ourDatabase = getWritableDatabase(); 

還與所有字段發送到調試器檢查createEntry不爲空(date, temperature, fertile, notes

+0

見編輯...它有公開的 – jcaruso 2013-05-12 19:32:59

+0

P.S.爲什麼它們都必須不爲零?在數據庫定義中它只指定一個不爲null。 – jcaruso 2013-05-12 19:34:16