如何在sqlite数据库中插入异常时解决没有这样的表

时间:2012-03-27 18:02:25

标签: android sqlite

我想使用SQLite,我编写了Database类并尝试在数据库表中插入值但是我得到的异常是:

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();
  }
});

1 个答案:

答案 0 :(得分: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();
}
}