2013-05-10 4 views
0

지금까지 문제없이 데이터베이스를 업데이트 할 때까지 다른 테이블이있는 데이터베이스가 있습니다. 하지만 지금은 "TABLE_ALERTAS"데이터베이스 버전 "DATABASE_VERSION = 12"업로드 항상 새 행을 추가하려면 행을 존재하지 않는 오류를 제공하십시오. 나는 무엇을 더 시도해야할지 모른다.SQLite 데이터베이스를 업데이트 할 수 없습니다. Android

저는 앱을 열 때 다른 모든 테이블이 업데이트된다는 것을 알고 있습니다.

문제는 내가 TABLE_ALERTAS에 KEY_CODIALERTA 행을 추가 할 때입니다.

공용 클래스 DBAdapter {

public static final String KEY_ROWID = "ID"; 
public static final String KEY_CODIACTIVITAT = "CODIACTIVITAT"; 
public static final String KEY_ACTIVITAT = "ACTIVITAT"; 
public static final String KEY_DATA = "DATA"; 
public static final String KEY_HORES = "HORES"; 

public static final String KEY_ROWID2 = "ID2"; 
public static final String KEY_nomprojecte = "NOMPROJECTE"; 
public static final String KEY_codictivitat = "CODIACTIVITAT"; 
public static final String KEY_nomctivitat = "NOMACTIVITAT"; 
public static final String KEY_codiprojecte = "CODIPROJECTE"; 

// Login table name 
private static final String TABLE_LOGIN = "login"; 

// Login Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_EMAIL = "email"; 
private static final String KEY_UID = "uid"; 
private static final String KEY_DNI = "created_at"; 

// Alert table name 
private static final String TABLE_ALERTAS = "alertas"; 

// Alert Table Columns names 
private static final String KEY_TEXTALERTA = "TEXTALERTA"; 
private static final String KEY_DESCALERTA = "DESCALERTA"; 
private static final String KEY_NOMACTIVITAT = "NOMACTIVITAT"; 
private static final String KEY_TITOLPROJECTE = "TITOLPROJECTE"; 
private static final String KEY_CODIALERTA = "CODIALERTA"; 


public static final String DATABASE_NAME = "DB_Informacio"; 
public static final String DATABASE_TABLE = "Informacio"; 
public static final String DATABASE_TABLE2 = "dadesPerOmplir"; 
public static final int DATABASE_VERSION = 12; 
public static final String TAG = "DBAdapter"; 

public static final String DATABASE_CREATE = "create table "+DATABASE_TABLE+"("+KEY_ROWID+" integer primary key autoincrement not null, "+ 
     KEY_CODIACTIVITAT+" text not null, "+KEY_ACTIVITAT+" text not null, "+KEY_DATA+" text not null, "+KEY_HORES+" text not null);"; 

public static final String DATABASE_CREATE2 = "create table "+DATABASE_TABLE2+"("+KEY_ROWID2+" integer primary key autoincrement not null, "+ 
     KEY_nomprojecte+" text not null, "+KEY_codictivitat+" text not null, "+KEY_nomctivitat+" text not null, "+KEY_codiprojecte+" text not null);"; 

public static final String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "(" 
     + KEY_ID + " INTEGER PRIMARY KEY," 
     + KEY_NAME + " TEXT," 
     + KEY_EMAIL + " TEXT UNIQUE," //Es unique pq es el que utilizamos para el login "userName" 
     + KEY_UID + " TEXT," 
     + KEY_DNI + " TEXT" + ")"; 

public static final String CREATE_ALERT_TABLE = "CREATE TABLE " + TABLE_ALERTAS + "(" 
     + KEY_ID + " INTEGER PRIMARY KEY," 
     + KEY_TEXTALERTA + " TEXT," 
     + KEY_DESCALERTA + " TEXT," 
     + KEY_NOMACTIVITAT + " TEXT," 
     + KEY_TITOLPROJECTE + " TEXT" 
     + KEY_CODIALERTA + " TEXT" + ")"; 

private final Context context; 
private DatabaseHelper DBHelper; 

private SQLiteDatabase db; 

public DBAdapter(Context ctx) 
{ 
    this.context = ctx; 
    DBHelper = new DatabaseHelper(context); 
} 
public static class DatabaseHelper extends SQLiteOpenHelper{ 

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

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     try{ 
      db.execSQL(DATABASE_CREATE); 
      db.execSQL(DATABASE_CREATE2); 
      db.execSQL(CREATE_LOGIN_TABLE); 
      db.execSQL(CREATE_ALERT_TABLE); 
     } 
     catch(SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     Log.w(DBAdapter.TAG, "se ha actualizado la base de datos"); 
     db.execSQL("DROP TABLE IF EXISTS '" + DBAdapter.DATABASE_TABLE + "'"); 
     db.execSQL("DROP TABLE IF EXISTS '" + DBAdapter.DATABASE_TABLE2 + "'"); 
     db.execSQL("DROP TABLE IF EXISTS '" + DBAdapter.TABLE_LOGIN + "'"); 
     db.execSQL("DROP TABLE IF EXISTS '" + DBAdapter.TABLE_ALERTAS + "'"); 
     onCreate(db); 
    } 

}public long insertarAlerta(String txtalerta,String txtdescalerta, String txtnomactivitat, String txtnomprojecte, String intcodialerta) 
{ 
    ContentValues valores = new ContentValues(); 
    valores.put(KEY_TEXTALERTA, txtalerta); 
    valores.put(KEY_DESCALERTA, txtdescalerta); 
    valores.put(KEY_NOMACTIVITAT, txtnomactivitat);   
    valores.put(KEY_TITOLPROJECTE, txtnomprojecte); 
    valores.put(KEY_CODIALERTA, intcodialerta); 
    return db.insert(TABLE_ALERTAS, null, valores); 
} 

답변

3

간단한 : 여기

는 코드입니다. 쉼표가 누락되었습니다.

public static final String CREATE_ALERT_TABLE = "CREATE TABLE " + TABLE_ALERTAS + "(" 
     + KEY_ID + " INTEGER PRIMARY KEY," 
     + KEY_TEXTALERTA + " TEXT," 
     + KEY_DESCALERTA + " TEXT," 
     + KEY_NOMACTIVITAT + " TEXT," 
     + KEY_TITOLPROJECTE + " TEXT," // a comma was missing here 
     + KEY_CODIALERTA + " TEXT" + ")"; 

내가 잡아 당신이 그런 예외를 던진해야하는이 같은 오류를 그리워하기 때문에, onCreate()에 예외를 무시하지 않는 것이 좋습니다.

catch(SQLException e) 
{ 
    e.printStackTrace(); 
    throw e; 
} 
+0

와우 감사합니다. @tbkn – benLIVE

+0

그래. * 예외가 정상적인 동작으로 발생하고 무시할 때의 결과를 알 수있을 때만 예외를 포착하고 무시하십시오. 그렇지 않으면 오류가보고되는지 확인해야하며 디버깅을 많이 절약 할 수 있습니다. – tbkn23

관련 문제