Java SQLite数据库,不允许我添加超过5列

Java SQLite数据库,不允许我添加超过5列,java,android,database,sqlite,android-sqlite,Java,Android,Database,Sqlite,Android Sqlite,我遵循一个教程,为Android创建了一个SQLite db db在少于6列的情况下运行良好(可以插入),但如果我尝试添加第6列并向其中插入数据,则不会插入任何内容,应用程序就会崩溃 这是一个问题,因为我需要我的数据库有13列 下面是数据库的代码,也是我的主要活动的代码,它通过用户输入将数据插入数据库 public class DataBaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME =

我遵循一个教程,为Android创建了一个SQLite db

db在少于6列的情况下运行良好(可以插入),但如果我尝试添加第6列并向其中插入数据,则不会插入任何内容,应用程序就会崩溃

这是一个问题,因为我需要我的数据库有13列

下面是数据库的代码,也是我的主要活动的代码,它通过用户输入将数据插入数据库

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();
                }
            }
    );
}

这里有什么明显的东西我好像遗漏了吗?这太令人沮丧了

正如@cricket_007所指出的,您需要增加数据库版本以执行onUpgrade并重新创建表

要解释功能性,请执行以下操作:

SQLiteOpenHelper构造函数的第四个参数是版本,您正在传递版本1:

public DataBaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
}
在您第一次安装应用程序时,android会创建数据库并保留版本

如果你增加版本号,比如说增加到2并执行你的应用程序,android会看到当前版本大于数据库版本,并且会调用onUpgrade,旧版本为1,新版本为2


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

tl;dr,您必须更改数据库版本并重新创建数据库,才能添加更多列。我将版本更改为2,然后运行应用程序,我得到了相同的结果。我已经卸载/重新安装了它,但当我尝试添加数据时它仍然崩溃。我完全不知道为什么会发生这种情况。请向您的logcat提供发生错误的信息。