Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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_Sqlite - Fatal编程技术网

Android 例外情况;桌子没有名为“…”的列;

Android 例外情况;桌子没有名为“…”的列;,android,sqlite,Android,Sqlite,我在尝试插入一个名为“my_card”的表时遇到了一个非常奇怪的错误 以下是我在单独的接口中定义的一些常量: //tables name public static final String TABLE_MY_CARD= "my_card" ; public static final String TABLE_MY_CONTACTS = "my_contacts" ; // Columns public static final String NAME = "name" ; public st

我在尝试插入一个名为“my_card”的表时遇到了一个非常奇怪的错误

以下是我在单独的接口中定义的一些常量:

//tables name
public static final String TABLE_MY_CARD= "my_card" ;
public static final String TABLE_MY_CONTACTS = "my_contacts" ;

// Columns
public static final String NAME = "name" ;
public static final String PHONE = "phone" ;
public static final String EMAIL = "email";

public static final String FACEBOOK = "facebook";
public static final String WEBSITE = "web";
public static final String MAJOR = "major";
public static final String ULINK = "ulink";
之后,我有了一个扩展SQLiteOpenHelper的类,它有两个函数。最重要的是创建由参数给定的表的第一个

public class MySQLite_methods extends SQLiteOpenHelper implements Tables {

private static final String DATABASE_NAME = "my_database.db" ;
private static final int DATABASE_VERSION = 1;
private String TABLE_NAME;

/** Create a helper object for the Events database */
public MySQLite_methods (Context ctx, String table_name) 
{
    super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
    this.TABLE_NAME = table_name;
}

@Override
public void onCreate(SQLiteDatabase db) 
{       
    String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + 
                    " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +               
                    NAME + " TEXT NOT NULL," + 
                    PHONE + " TEXT NOT NULL,"+
                    EMAIL + " TEXT NOT NULL,"+                      
                    FACEBOOK + " TEXT,"+
                    WEBSITE + " TEXT,"+
                    MAJOR + " TEXT NOT NULL,"+
                    ULINK + " TEXT NOT NULL" + ");" ;

    db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}
}
最后,在我的活动中,按下保存按钮后,将创建该类的实例,并且必须将某些EditText-s的值插入数据库:

            MySQLite_methods mysql = new MySQLite_methods (context, TABLE_MY_CARD);


            Log.d("geo", "before getWr....");

            // getting the database..
            SQLiteDatabase db = mysql.getWritableDatabase();

            // creating an object of type ContentValues which represents the record i am gonna add into the DB
            ContentValues values = new ContentValues();

            values.put(NAME, name.getText().toString());
            values.put(PHONE, phone.getText().toString());
            values.put(EMAIL, email.getText().toString());

            values.put(FACEBOOK, facebook.getText().toString());
            values.put(WEBSITE, website.getText().toString());
            values.put(MAJOR, major.getText().toString());
            values.put(ULINK, ulink.getText().toString());

            Log.d("geo", "before insert");

            // inserting data
            db.insertOrThrow(TABLE_MY_CARD, null, values);
在插入时,它给出了以下例外情况:

“android.database.sqlite.SQLiteException:表my_卡没有名为web的列…”

我一次又一次地检查打字错误,但没有。。。所以我不知道现在该怎么办。。。有什么想法吗?
谢谢

您的创建SQL从
创建表(如果不存在)开始。因此,我的想法是,在设备已经拥有该表的情况下添加web列。如果是这种情况,那么只需重新安装应用程序-它将删除数据库,这样您就可以确保表将使用该列创建。

对于我的情况,我忘记为类型插入一个空格,这类似于以下错误代码:

String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + 
                " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +               
                NAME + " TEXT NOT NULL," + 
                PHONE + " TEXT NOT NULL,"+
                EMAIL + " TEXT NOT NULL,"+                      
                FACEBOOK + "TEXT,"+
                WEBSITE + " TEXT,"+
                MAJOR + " TEXT NOT NULL,"+
                ULINK + " TEXT NOT NULL" + ");" ;

db.execSQL(sql);
FACEBOOK专栏将出现一个例外,因为缺少一个空白。因此,在我的例子中,当发生此sqlite异常时,还可以检查数据库表格式