2017-04-14 64 views
0

我遵循教程并为Android创建了SQLite数据库。SQLite数据库,不会让我添加超过5列

数据库工作正常(可以插入)少于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并执行你的应用程序,android会看到当前版本大于数据库版本,并会调用onUpgrade在oldVersion中传递1,新版本。

您总是在onUpgrade中重新创建表,所以只需更改版本号即可解决。

+0

我将版本更改为2并运行该应用程序,即时获得相同的结果。我已经卸载/重新安装它,但它仍然崩溃时,我尝试添加数据。即时消息完全丧失,为什么发生这种情况 – 944jmc

+0

请提供您的logcat的错误发生。 – jonathanrz