Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我能';我无法访问我随后添加的列。我该怎么办?_Android_Database_Sqlite - Fatal编程技术网

Android 我能';我无法访问我随后添加的列。我该怎么办?

Android 我能';我无法访问我随后添加的列。我该怎么办?,android,database,sqlite,Android,Database,Sqlite,首先,我创建了一个表: public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + "sorular" + " (_id INTEGER PRIMARY KEY AUTO_INCREMENT," + "soruIcerik TEXT," + " siklar1 TEXT," + " siklar2 TEXT," + " sikl

首先,我创建了一个表:

public void onCreate(SQLiteDatabase db) {
     db.execSQL("CREATE TABLE " + "sorular"
             + " (_id INTEGER PRIMARY KEY AUTO_INCREMENT,"
             + "soruIcerik TEXT," + " siklar1 TEXT," + " siklar2 TEXT,"
             + " siklar3 TEXT," + "siklar4 TEXT," + "cevap INTEGER);");
}
然后我添加了数据

之后,我决定向表中添加一个新列,并编写了以下代码:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if(newVersion > oldVersion){
          db.execSQL("ALTER TABLE sorular ADD COLUMN zorluk INTEGER");
        }
    }
我将数据添加到新列中,称为manuel

但当我想从新列访问数据时,应用程序意外地停止了。代码如下所示:

 String soruMetin = okunanlar.getString(okunanlar.getColumnIndex("soruIcerik"));//it's normal
 String siklar1 = okunanlar.getString(okunanlar.getColumnIndex("siklar1"));    //it's normal
 String siklar2 = okunanlar.getString(okunanlar.getColumnIndex("siklar2"));    //it's normal
 String siklar3 = okunanlar.getString(okunanlar.getColumnIndex("siklar3"));    //it's normal
 String siklar4 = okunanlar.getString(okunanlar.getColumnIndex("siklar4"));    //it's normal
 int dogruCevap = okunanlar.getInt(okunanlar.getColumnIndex("cevap"));         //it's normal
 int zorluk = okunanlar.getInt(okunanlar.getColumnIndex("zorluk"));            //it has problem

有什么问题?如何解决此问题?

您应该将您的
onCreate
更改为此,并添加新列:

public void onCreate(SQLiteDatabase db) {
     db.execSQL("CREATE TABLE " + "sorular"
             + " (_id INTEGER PRIMARY KEY AUTO_INCREMENT,"
             + "soruIcerik TEXT," + " siklar1 TEXT," + " siklar2 TEXT,"
             + " siklar3 TEXT," + "siklar4 TEXT," + " zorluk INTEGER" + "cevap INTEGER);");
}

从以前的sql创建的表将在
onUpgrade

中更改,新安装不会触发onUpgrade,它们将运行onCreate,如果您在onUpgrade中进行了任何更改,您也需要将其包含在onCreate中,onCreate必须始终运行数据库的完整最新结构,这意味着您应该在CREATETABLE语句中声明sorular字段。您所说的我都做了,但结果是一样的。我已将
ALTER TABLE sorular添加列zorluk INTEGER
添加到onUpgrade,并已将
CREATE TABLE sorular(_idinteger主键自动递增、soruIcerik TEXT、siklar1 TEXT、siklar2 TEXT、siklar3 TEXT、siklar4 TEXT、cevap INTEGER、zorluk INTEGER)添加到onCreate。他们在同一时间运行。乌普丝!我忘了在我的列数组中添加“zorluk”。我刚刚认出了它。我很抱歉。我已经修好了。谢谢。。