2017-04-14 15 views
0

私はチュートリアルに従い、Android用のSQLiteデータベースを作成しました。SQLiteデータベース、5列以上を追加できません

dbは6列未満でうまく機能しますが、6列目を追加してデータを挿入しようとすると、何も挿入されずにアプリケーションがクラッシュします。

これは私のデータベースが13の列を持つ必要があるので、問題です。

以下はdbのコードであり、私の主な活動のコードでもあり、ユーザーの入力によってデータベースにデータを挿入します。

public class DataBaseHelper extends SQLiteOpenHelper { 
public static final String DATABASE_NAME = "Student.db"; 
public static final String TABLE_NAME = "student_table"; 
public static final String COL_1 = "ID"; 
public static final String COL_2 = "EVENTS"; 
public static final String COL_3 = "DETAILS"; 
public static final String COL_4 = "ALLOCATION"; 
public static final String COL_5 = "TEST"; 
public static final String COL_6 = "TESTt"; 





public DataBaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table " + TABLE_NAME +" (ID INTEGER PRIMARY KEY AUTOINCREMENT,EVENTS TEXT,DETAILS TEXT,ALLOCATION TEXT, TEST TEXT, TESTt TEXT)"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); 
    onCreate(db); 
} 

public boolean insertData(String event,String details,String allocation,String test, String testt) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(COL_2,event); 
    contentValues.put(COL_3,details); 
    contentValues.put(COL_4,allocation); 
    contentValues.put(COL_5,test); 
    contentValues.put(COL_6,testt); 
    long result = db.insert(TABLE_NAME,null ,contentValues); 
    if(result == -1) 
     return false; 
    else 
     return true; 
} 

public Cursor getAllData() { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor res = db.rawQuery("select * from "+TABLE_NAME,null); 
    return res; 
} 

public boolean updateData(String id,String event,String details,String allocation,String test,String testt) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(COL_1,id); 
    contentValues.put(COL_2,event); 
    contentValues.put(COL_3,details); 
    contentValues.put(COL_4,allocation); 
    contentValues.put(COL_5,test); 
    contentValues.put(COL_6,testt); 
    db.update(TABLE_NAME, contentValues, "ID = ?",new String[] { id }); 
    return true; 
} 

public Integer deleteData (String id) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    return db.delete(TABLE_NAME, "ID = ?",new String[] {id}); 
} 

とメイン

public void AddData() { 
    add.setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        boolean isInserted = myDb.insertData(tv.getText().toString(), 
          details.getText().toString(), 
          tktal.getText().toString(), 
          gen.getText().toString(), 
          genamt.getText().toString() 
        ); 
        if (isInserted == true) 
         Toast.makeText(MainActivity.this, "Data Inserted", Toast.LENGTH_LONG).show(); 
        else 
         Toast.makeText(MainActivity.this, "Data not Inserted", Toast.LENGTH_LONG).show(); 
       } 
      } 
    ); 
} 

で、私はここに欠けているように見える紛れも明白なものはありますか?それは非常にイライラしています!

+1

** tl; dr **より多くの列を追加するには、データベースのバージョンを変更し、**データベースを再作成**する必要があります。 –

答えて

0

@ cricket_007が示すように、データベースのバージョンを増やしてonUpgradeを実行し、テーブルを再作成する必要があります。

funcionalityを説明するために:

SQLiteOpenHelperコンストラクタの四番目のパラメータは、バージョンである、バージョン1渡している:あなたはあなたのアプリケーションをインストールし、初めてでは

public DataBaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
} 

を、Androidはデータベースを作成しますバージョンを保持します。

バージョン番号を増やして2にしてアプリを実行すると、アンドロイドは現在のバージョンがデータベースのバージョンよりも大きいことを確認し、onUpgradeをoldVersionで1、2でnewVersion

あなたは常にonUpgradeでテーブルを作り直すので、バージョン番号を変更するだけで解決します。

+0

バージョンを2に変更し、同じ結果を得ているアプリとIMを実行しました。私はアンインストールした/それを再インストールしたが、まだ私はデータを追加しようとするとクラッシュします。私はなぜこれが起こっているのかについて完全な犠牲を払いました – 944jmc

+0

あなたのlogcatにエラーが発生したことをお知らせください。 – jonathanrz

関連する問題