2013-04-28 2 views
0

데이터베이스가 코드 내에 이미 작성되었으므로 붙여 넣으려는 코드와 매우 유사합니다. 나는 데이터베이스 이름을 동일하게 유지하고 새로운 테이블을 만들고 싶었다. 아무도 도움을 줄 수 있습니까, 감사합니다. 내가 무엇입니까 오류 :Android Java SQLite에서 두 번째 테이블 만들기

  04-28 00:03:10.182: I/Database(310): sqlite returned: error code = 1, msg = 
      no such table: stats 
      04-28 00:03:10.202: E/Database(310): Error inserting username= height= 
       weight= protein= age= fats= calories= carbs= 
       04-28 00:03:10.202: E/Database(310): 
       android.database.sqlite.SQLiteException: no such table: stats: , while 
       compiling: INSERT INTO stats(username, height, weight, protein, age, 
      fats, calories, carbs) VALUES(?, ?, ?, ?, ?, ?, ?, ?); 

AddStats.Java

package com.gofitness.www; 

    import android.content.ContentValues; 
    import android.content.Context; 
    import android.database.Cursor; 
    import android.database.sqlite.SQLiteDatabase; 
    import android.database.sqlite.SQLiteDatabase.CursorFactory; 
    import android.database.sqlite.SQLiteOpenHelper; 

    public class AddStats { 

public static final String KEY_ROWID = "userid"; 
public static final String KEY_NAME = "username"; 
public static final String KEY_WEIGHT = "weight"; 
public static final String KEY_HEIGHT = "height"; 
public static final String KEY_AGE = "age"; 
public static final String KEY_CALORIES = "calories"; 
public static final String KEY_PROTEIN = "protein"; 
public static final String KEY_CARBS = "carbs"; 
public static final String KEY_FATS = "fats"; 

private static final String DATABASE_NAME = "gofitness"; 
private static final String DATABASE_TABLE = "stats"; 
private static final int DATABASE_VERSION = 1; 


private DbHelper ourHelper; 
Context ourContext; 
private SQLiteDatabase ourDatabase; 

private static class DbHelper extends SQLiteOpenHelper 
{ 





    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase dbstats) { 
     // TODO Auto-generated method stub 
     dbstats.execSQL(
       "CREATE TABLE " + DATABASE_TABLE + "(" + 
     KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
         KEY_NAME + " TEXT NOT NULL, " + 
     KEY_AGE + " INT NOT NULL, " + 
     KEY_CALORIES + " INT NOT NULL, " + 
     KEY_WEIGHT + " INT NOT NULL, " + 
     KEY_HEIGHT + " INT NOT NULL, " + 
     KEY_PROTEIN + " INT NOT NULL, " + 
     KEY_FATS + " INT NOT NULL, " + 
     KEY_CARBS + " INT NOT NULL);" 

       ); 
    } 

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


    } 

} 
public AddStats(Context c) 
{ 
    ourContext = c; 
} 

public AddStats open(){ 
    ourHelper = new DbHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 


} 
public void close(){ 
ourHelper.close(); 
} 

public long createEntry(String usernamevar, String agevar,String weightvar,String   
    heightvar,String caloriesvar, 
     String proteinvar, String carbsvar, String fatvar) { 
    // TODO Auto-generated method stub 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_NAME,usernamevar); 
    cv.put(KEY_AGE,agevar); 
    cv.put(KEY_WEIGHT,weightvar); 
    cv.put(KEY_HEIGHT,heightvar); 
    cv.put(KEY_CALORIES,caloriesvar); 
    cv.put(KEY_PROTEIN,proteinvar); 
    cv.put(KEY_CARBS,carbsvar); 
    cv.put(KEY_FATS,fatvar); 

    return ourDatabase.insert(DATABASE_TABLE,null, cv); 

} 

public String getData() { 
    // TODO Auto-generated method stub 

    String[] columns = new String[]{KEY_ROWID, KEY_NAME, 
     KEY_AGE,KEY_WEIGHT,KEY_HEIGHT, KEY_CALORIES,KEY_PROTEIN,KEY_CARBS,KEY_FATS}; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, 
     null, null); 
    String result = ""; 
    int iRow = c.getColumnIndex(KEY_ROWID); 
    int iUser = c.getColumnIndex(KEY_NAME); 
    int iAge = c.getColumnIndex(KEY_AGE); 
    int iWeight = c.getColumnIndex(KEY_WEIGHT); 
    int iHeight = c.getColumnIndex(KEY_HEIGHT); 
    int iCalories = c.getColumnIndex(KEY_CALORIES); 
    int iProtein = c.getColumnIndex(KEY_PROTEIN); 
    int iCarb = c.getColumnIndex(KEY_CARBS); 
    int iFat = c.getColumnIndex(KEY_FATS); 

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 

    result = result + c.getString(iRow) + " " + c.getString(iUser) + " " + 
      c.getString(iAge) + c.getString(iWeight) 
      + c.getString(iHeight) + c.getString(iCalories)+  
      c.getString(iProtein) + c.getString(iCarb) + c.getString(iFat) +"\n"; 
    } 
    return result; 
} 

}

AddStatsForm.Java

 package com.gofitness.www; 

     import android.app.Activity; 



     import android.os.Bundle; 
     import android.view.View; 
     import android.view.View.OnClickListener; 
     import android.widget.Button; 
     import android.widget.EditText; 
     import android.widget.TextView; 


     public class AddStatsForm extends Activity implements OnClickListener { 

EditText username, age, weight,height, calories, protein, carbs, fat; 
TextView success; 
Button submit; 



@Override 
protected void onCreate(Bundle viewInfo) { 
    // TODO Auto-generated method stub 
    super.onCreate(viewInfo); 
    setContentView(R.layout.stats); 

    submit = (Button) findViewById(R.id.bEnter); 
     username = (EditText) findViewById(R.id.etUsername); 
    age = (EditText) findViewById(R.id.etAge); 
    weight = (EditText) findViewById(R.id.etWeight); 
    height = (EditText) findViewById(R.id.etHeight); 
    calories = (EditText) findViewById(R.id.etCalories); 
    protein = (EditText) findViewById(R.id.etProtein); 
    carbs = (EditText) findViewById(R.id.etCarbs); 
     fat = (EditText) findViewById(R.id.etFat); 
     success = (TextView) findViewById(R.id.tvSuccess); 





    submit.setOnClickListener(this); 

} 

@Override 
    public void onClick(View view) { 


      String usernamevar = username.getText().toString(); 
      String agevar = age.getText().toString(); 
      String weightvar = weight.getText().toString(); 
      String heightvar = height.getText().toString(); 
      String caloriesvar = calories.getText().toString(); 
      String proteinvar = protein.getText().toString(); 
      String carbsvar = carbs.getText().toString(); 
      String fatvar = fat.getText().toString(); 

      AddStats entry = new AddStats(AddStatsForm.this); 
      entry.open(); 
      entry.createEntry(usernamevar ,agevar, weightvar, h   
       heightvar, caloriesvar, proteinvar, carbsvar, fatvar); 
      entry.close(); 


     }} 
+0

앱을 제거하고 난 단지 이클립스에 시뮬레이터 일하고 다시 –

+0

를 실행합니다. – user2171245

+0

시뮬레이터에서 사용자 데이터를 지우거나 다른 시뮬레이터를 생성하는 옵션이 있습니다. –

답변

0

DATABASE_VERSION 변수에 적어도 2을 높입니다. 앱을 업데이트하고 다시 실행하면 데이터베이스를 열려고 시도 할 때 시스템에서 기존 데이터베이스의 버전 번호가 지정한 버전 번호보다 낮다는 것을 인식합니다. onUpgrade()으로 전화하여 이전 버전과 새 버전을 제공합니다. 이 정보를 사용하여 데이터베이스를 적절하게 변경하십시오.

현재 onUpgrade 메서드는 종료 테이블을 삭제하고 onCreate을 다시 호출합니다. 이는 작동하지만 기존 데이터를 보존하지 않습니다. 이 대신 같은 것을 고려해 볼 수 있습니다 :

@Override 
public void onUpgrade(SQLiteDatabase dbstats, int oldVersion, int newVersion) { 
    if (oldVersion == 1) { 
     db.execSql(/* create second table */); 
    } 
}