2011-11-19 49 views
3

我面临一个非常奇怪的错误,同时试图插入到名为“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,用2个函数的类。最重要的是第一个创建由参数给出的表格。

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_card没有名为网站列......”

我检查一遍又一遍的错别字,但没有...所以我不知道现在该做什么......任何想法? 谢谢

回答

9

您创建的SQL以CREATE TABLE IF NOT EXISTS开头。所以我的想法是你添加了web列,而设备已经有了这张表。如果是这种情况,那么只需重新安装应用程序 - 它会删除数据库,所以您可以确保该表将与该列一起创建。

+0

你是对的!非常感谢.... ! – Madrugada

2

对于我而言,我忘了插入一个空的空间类型,就像下面的错误代码:

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异常时,您还可以检查数据库表格格式。