2012-03-27 26 views
1

我想使用SQLite和我寫的數據庫類,並試圖在數據庫表中插入值,但我得到的例外是:如何解決沒有這樣的表,而將在sqlite的數據基本異常

I/Database(958): sqlite returned: error code = 1, msg = no such table: Exercise 

,當我固定的記錄它指向此聲明:

long d= dbAdapter.SaveExecise(date, exercise_Time, ex_Name, minutes, burned_cals); 

爲什麼這引發異常?我已閱讀並嘗試過這些問題的解決方案,但錯誤仍然可以解決它? 這是我的代碼:

public class DBAdapter { 

    private static final String DB_NAME = "MYDB"; 
    private static final int DB_VERSION = 1; 
    private static final String EXERCISE_TABLE_NAME = "Exercise"; 
    private static final String TAG = "DBAdapter"; 
    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 
    private Context context; 

    // table Exercise columns name 
    public static final String KEY_DATE = "Date"; 
    public static final String KEY_TIME = "Time"; 
    public static final String KEY_NAME = "Name"; 
    public static final String KEY_PERIOD = "Period"; 
    public static final String KEY_BURNEDCALS = "Burned_Calories"; 

    private static final String EXERCISE_TABLE_CREATE = 
     "create tables Exercise (Date text not null , " 
     + "Time text not null ,Name text not null," 
     + "Period REAL not null, Burned_Calories REAL not null," 
     + " primary key(Date,Time));"; 

    public DBAdapter(Context ctxt) { 
    this.context = ctxt; 
    DBHelper = new DatabaseHelper(context); 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper { 

    DatabaseHelper(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    public void onCreate(SQLiteDatabase db) { 
     try { 
     db.execSQL(EXERCISE_TABLE_CREATE); 
     } catch (SQLException e) { 
     e.printStackTrace(); 
     } 
    } 

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version" 
      + oldVersion + " to " + newVersion 
      + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS Exercise"); 
     onCreate(db); 
    } 

    public DBAdapter open() throws SQLException { 
     db = DBHelper.getWritableDatabase(); 
     return this; 
    } 

    // ---closes the database--- 
    public void close() { 
     DBHelper.close(); 
    } 

    // ---insert Exercise info to the Exercise table--- 
    public long SaveExecise(String date, String time, String name, float period, 
     float BurnedCalories) { 
     ContentValues content = new ContentValues(); 
     content.put(KEY_DATE, date); 
     content.put(KEY_TIME, time); 
     content.put(KEY_NAME, name); 
     content.put(KEY_PERIOD, period); 
     content.put(KEY_BURNEDCALS, BurnedCalories); 

     return db.insert(EXERCISE_TABLE_NAME, null, content); 
    } 
    } 
} 

,在這裏在這裏我插在練習表中的鍛鍊信息:

save_exercise_btn = (Button) findViewById(R.id.save_exercise_Btn); 
save_exercise_btn.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
    showSavingDialog(); 
    // save the name,ime,burnedcals of the exercise in the DB 
    int year, month, day; 
    year = localCalendar.get(1); 
    month = localCalendar.get(2) + 1; 
    day = localCalendar.get(5); 
    String date = year + "/" + month + "/" + day; 
    DBAdapter dbAdapter = new DBAdapter(SelectedExerciseInfo.this); 
    dbAdapter = dbAdapter.open(); 
    long d = dbAdapter.SaveExecise(date, exercise_Time, ex_Name, minutes, burned_cals); 
    dbAdapter.close(); 
    hideSavingDialog(); 
    } 
}); 
+0

請格式化你的代碼發佈之前!我只是爲你做的,所以我們實際上可以看到什麼可能是錯的。 – 2012-03-27 18:44:42

回答

0
private static final String EXERCISE_TABLE_CREATE ="create tables Exercise (Date text not null , "+ 
    "Time text not null ,Name text not null," + "Period REAL not null, 
    Burned_Calories REAL not null," +" primary key(Date,Time));" ; 

你提出的代替。查詢變得不正確,並且沒有創建表。改變它,並表將得到建立,然後數據可以添加

private static final String EXERCISE_TABLE_CREATE ="create table Exercise (Date text not null , "+ 
    "Time text not null ,Name text not null," + "Period REAL not null, 
    Burned_Calories REAL not null," +" primary key(Date,Time));" ; 

檢查這個代碼將對DBAdapter:

public class DBAdapter 
{ 
    private static final String DB_NAME="MYDB3131"; 
    private static final int DB_VERSION= 1 ; 
    private static final String EXERCISE_TABLE_NAME="Exercise"; 
    private static final String TAG = "DBAdapter"; 
    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 
    private Context context; 
    // table Exercise columns name 
    public static final String KEY_DATE="Date"; 
    public static final String KEY_TIME="Time"; 
    public static final String KEY_NAME="Name"; 
    public static final String KEY_PERIOD="Period"; 
    public static final String KEY_BURNEDCALS="Burned_Calories"; 
    /*private static final String EXERCISE_TABLE_CREATE ="create table Exercise (Date text not null , "+ 
    "Time text not null ,Name text not null," + "Period REAL not null, Burned_Calories REAL not null);" ; 

*/ 
    private static final String EXERCISE_TABLE_CREATE ="create table Exercise (Date text not null , "+ 
    "Time text not null ,Name text not null," + "Period REAL not null, Burned_Calories REAL not null," +" primary key(Date,Time));" ; 

public DBAdapter(Context ctxt) 
    {  this.context=ctxt; 
    DBHelper= new DatabaseHelper(context); 
    } 
    private static class DatabaseHelper extends SQLiteOpenHelper 
    {  
     DatabaseHelper(Context context) 
     { 
      super(context, DB_NAME, null, DB_VERSION); 
     } 
     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      db.execSQL(EXERCISE_TABLE_CREATE); 
      System.out.println("hereeeee"); 
      } 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
     { 
      Log.w(TAG, "Upgrading database from version" + oldVersion +" to "+ newVersion + ", which will destroy all old data");  
      db.execSQL("DROP TABLE IF EXISTS Exercise");     
      onCreate(db); 
     } 
    } 

    //--open the DB 
    public DBAdapter open() throws SQLException 
    { 
     db = DBHelper.getWritableDatabase(); 
     return this; 
    } 

    //---closes the database--- 
    public void close() 
    { 
     DBHelper.close(); 
    } 
    //---insert Exercise info to the Exercise table--- 
    public long SaveExecise(String date ,String time,String name ,float period, float BurnedCalories) 
    { 
     ContentValues content = new ContentValues(); 
     content.put(KEY_DATE, date); 
     content.put(KEY_TIME, time); 
     content.put(KEY_NAME, name); 
     content.put(KEY_PERIOD,period); 
     content.put(KEY_BURNEDCALS, BurnedCalories); 

     return db.insert(EXERCISE_TABLE_NAME, null, content); 
    }} 

用於樣品活動代碼:

public class MyA extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    int year,month,day; 
    Calendar localCalendar = Calendar.getInstance(); 
    year = localCalendar.get(1); 
month = localCalendar.get(2)+1; 
day = localCalendar.get(5); 
String date= year +"/"+month+"/"+day; 
       DBAdapter dbAdapter=new DBAdapter(this); 
       dbAdapter=dbAdapter.open(); 
long d= dbAdapter.SaveExecise(date, 10034+"", 100+"", 100f, 100f); 
       dbAdapter.close(); 
Toast.makeText(this, "text"+d, Toast.LENGTH_SHORT).show(); 
} 
} 
+0

我按照你所說的「把桌子換成桌子」,但錯誤依然! – user 2012-03-27 18:16:54

+0

請你能幫助我嗎?錯誤仍然 – user 2012-03-27 18:30:00

+0

讓我跑,並檢查 – Akhil 2012-03-27 18:43:27