Как решить, нет такой таблицы при вставке исключения в базе данных SQLite - PullRequest
1 голос
/ 27 марта 2012

Я хочу использовать 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 голосов
/ 27 марта 2012
 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();
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...