2013-12-17 45 views
1

與SQLite數據庫數據欲插入在SQLite數據庫10至15列,但是當我運行該應用程序它顯示錯誤消息:錯誤插入Android中

源碼返回:錯誤代碼= 1,味精=表new_lead沒有列命名add_to_contacts

並在SQLite數據庫中插入數據時獲取SQLite異常。

這是我的數據庫代碼。

public class DataBaseHelper extends SQLiteOpenHelper 
{ 




    public DataBaseHelper(Context context, String name,CursorFactory factory, int version) 
    { 
       super(context, name, factory, version); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase _db) 
    { 
      _db.execSQL(DataBase_Adapter.DATABASE_CREATE_LOGIN); 
      _db.execSQL(DataBase_Adapter.CREATE_NEW_LEAD_TABLE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) 
    { 

      Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " +_newVersion + ", which will destroy all old data"); 

      _db.execSQL("DROP TABLE IF EXISTS " + DataBase_Adapter.TABLE_NAME_LOGIN); 
      _db.execSQL("DROP TABLE IF EXISTS " + DataBase_Adapter.TABLE_NEW_LEAD); 

      onCreate(_db); 
    } 

} 

這是我的數據庫適配器代碼。

public class DataBase_Adapter 
{ 

     //Database NAme 
     static final String DATABASE_NAME = "lead_management.db"; 

     //Database Version 
     static final int DATABASE_VERSION = 4; 


     // Variable to hold the database instance 
     public SQLiteDatabase db; 

     // Context of the application using the database. 
     private final Context context; 

     // Database open/upgrade helper 
     private DataBaseHelper dbHelper; 

     public DataBase_Adapter(Context _context) 
     { 
      context = _context; 
      dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     public DataBase_Adapter open() throws SQLException 
     { 
      db = dbHelper.getWritableDatabase(); 
      return this; 
     } 

     public void close() 
     { 
      db.close(); 
     } 

     public SQLiteDatabase getDatabaseInstance() 
     { 
      return db; 
     } 
    // TODO Auto-generated method 
      /*************************************Table New Lead*******************************************/ 

      //Table name 
      public static String TABLE_NEW_LEAD="new_lead"; 

      //Creating New Lead Table Columns 
      public static final String KEY_NEW_LEAD_ID ="id"; 
      public static final String KEY_ORGANIZATION_NAME="organization"; 
      public static final String KEY_NEW_LEAD_NAME ="name"; 
      public static final String KEY_NEW_LEAD_EMAIL ="email"; 
      public static final String KEY_NEW_LEAD_MOBILE="mobile"; 
      public static final String KEY_NEW_LEAD_Product="define_products"; 
      public static final String KEY_NEW_LEAD_BUDGET="budget"; 
      public static final String KEY_NEW_LEAD_PRIORITY="priority"; 
      public static final String KEY_NEW_LEAD_STATUS="status"; 
      public static final String KEY_NEW_LEAD_NOTES="notes"; 
      public static final String KEY_NEW_LEAD_REMINDER_DATE="reminder_date"; 
      public static final String KEY_NEW_LEAD_REMINDER_TIME="reminder_time"; 
      public static final String KEY_NEW_LEAD_ADDtoCONTACTS="add_to_contacts"; 
      public static final String KEY_NEW_LEAD_CurrentDate="current_date"; 


      //// SQL Statement to create a New Lead Database. 


      static final String CREATE_NEW_LEAD_TABLE = "CREATE TABLE "+ TABLE_NEW_LEAD + "(" 
                + KEY_NEW_LEAD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
                + KEY_ORGANIZATION_NAME + " TEXT," 
                + KEY_NEW_LEAD_NAME + " TEXT, " 
                + KEY_NEW_LEAD_EMAIL+ " TEXT, " 
                + KEY_NEW_LEAD_MOBILE + " TEXT, " 
                + KEY_NEW_LEAD_Product + " TEXT, " 
                + KEY_NEW_LEAD_BUDGET + " TEXT, " 
                + KEY_NEW_LEAD_PRIORITY + " TEXT, " 
                + KEY_NEW_LEAD_STATUS + " TEXT, " 
                + KEY_NEW_LEAD_NOTES + " TEXT, " 
                + KEY_NEW_LEAD_REMINDER_DATE + " TEXT, " 
                + KEY_NEW_LEAD_REMINDER_TIME + " TEXT, " 
                + KEY_NEW_LEAD_ADDtoCONTACTS + " TEXT, " 
                + KEY_NEW_LEAD_CurrentDate + " TEXT "+");"; 


      public void insert_NewLead_Entry(New_Lead_BeanClass newLead_BeanClass) 
      { 
       SQLiteDatabase sdb = dbHelper.getWritableDatabase(); 

       ContentValues contentNewLead_Val=new ContentValues(); 

       contentNewLead_Val.put(KEY_ORGANIZATION_NAME, newLead_BeanClass.get_organization()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_NAME, newLead_BeanClass.get_Name()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_EMAIL, newLead_BeanClass.get_Email()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_MOBILE, newLead_BeanClass.get_MobileNo()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_Product, newLead_BeanClass.get_Product()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_BUDGET, newLead_BeanClass.get_Budget()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_PRIORITY, newLead_BeanClass.get_Priority()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_STATUS, newLead_BeanClass.get_Status()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_NOTES, newLead_BeanClass.get_Notes()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_REMINDER_DATE, newLead_BeanClass.get_Reminder_Date()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_REMINDER_TIME, newLead_BeanClass.get_Reminder_Time()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_ADDtoCONTACTS, newLead_BeanClass.get_AddtoContact()); 
       contentNewLead_Val.put(KEY_NEW_LEAD_CurrentDate, newLead_BeanClass.get_CurrentDate()); 

       sdb.insert(TABLE_NEW_LEAD , null , contentNewLead_Val); 

       //Close The Database Connection 
       sdb.close(); 

      } 

} 

這是我的活動代碼插入數據。

dbHandller=new DataBase_Adapter(this); 
       dbHandller=dbHandller.open(); 

       New_Lead_BeanClass new_Lead_BeanClass = new New_Lead_BeanClass(); 

       new_Lead_BeanClass.set_organization(strOrgName); 
       new_Lead_BeanClass.set_Name(strContactName); 
       new_Lead_BeanClass.set_Email(strContactEmail); 
       new_Lead_BeanClass.set_MobileNo(strContactMobile); 
       new_Lead_BeanClass.set_Product(selectedProductItem); 
       new_Lead_BeanClass.set_Budget(strBudget); 
       new_Lead_BeanClass.set_Priority(selectedPriorityItem); 
       new_Lead_BeanClass.set_Status(selectedStatusItem); 
       new_Lead_BeanClass.set_Notes(strNotes); 
       new_Lead_BeanClass.set_Reminder_Date(strDate); 
       new_Lead_BeanClass.set_Reminder_Time(strTime); 
       new_Lead_BeanClass.set_AddtoContact(strToggleVlaue); 
       new_Lead_BeanClass.set_CurrentDate(strCurrentDate); 

       dbHandller.insert_NewLead_Entry(new_Lead_BeanClass); 

日誌貓堆棧跟蹤信息

12-17 11:28:57.703: E/Database(336): Error inserting budget=7878 reminder_time=2 : 27 organization=war add_to_contacts=true status=open [email protected] priority=medium current_date=17-Dec-2013 name=gt define_products=a reminder_date=3-17-2014 notes=vhbgjhngk mobile=56768 
12-17 11:28:57.703: E/Database(336): android.database.sqlite.SQLiteException: table new_lead has no column named add_to_contacts: , while compiling: INSERT INTO new_lead(budget, reminder_time, organization, add_to_contacts, status, email, priority, current_date, name, define_products, reminder_date, notes, mobile) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); 
12-17 11:28:57.703: E/Database(336): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
12-17 11:28:57.703: E/Database(336): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92) 
12-17 11:28:57.703: E/Database(336): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65) 
12-17 11:28:57.703: E/Database(336): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83) 
12-17 11:28:57.703: E/Database(336): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41) 
12-17 11:28:57.703: E/Database(336): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149) 
12-17 11:28:57.703: E/Database(336): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569) 
12-17 11:28:57.703: E/Database(336): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426) 
12-17 11:28:57.703: E/Database(336): at com.lead_management_project.DataBase_Adapter.insert_NewLead_Entry(DataBase_Adapter.java:245) 
12-17 11:28:57.703: E/Database(336): at com.lead_management_project.New_Lead_Activity5$9.onClick(New_Lead_Activity5.java:411) 
12-17 11:28:57.703: E/Database(336): at android.view.View.performClick(View.java:2485) 
12-17 11:28:57.703: E/Database(336): at android.view.View$PerformClick.run(View.java:9080) 
12-17 11:28:57.703: E/Database(336): at android.os.Handler.handleCallback(Handler.java:587) 
12-17 11:28:57.703: E/Database(336): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-17 11:28:57.703: E/Database(336): at android.os.Looper.loop(Looper.java:123) 
12-17 11:28:57.703: E/Database(336): at android.app.ActivityThread.main(ActivityThread.java:3683) 
12-17 11:28:57.703: E/Database(336): at java.lang.reflect.Method.invokeNative(Native Method) 
12-17 11:28:57.703: E/Database(336): at java.lang.reflect.Method.invoke(Method.java:507) 
12-17 11:28:57.703: E/Database(336): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
12-17 11:28:57.703: E/Database(336): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
12-17 11:28:57.703: E/Database(336): at dalvik.system.NativeStart.main(Native Method) 
+0

你在哪裏創建d atabase?我沒有看到該代碼 – insomniac

+0

@insomniac,我必須發佈我的數據庫代碼。 – tazeenmulani

回答

1

你應該包括的onCreate()助手類的這個方法

static final String CREATE_NEW_LEAD_TABLE = "CREATE TABLE "+ TABLE_NEW_LEAD + "(" 
              + KEY_NEW_LEAD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
              + KEY_ORGANIZATION_NAME + " TEXT," 
              + KEY_NEW_LEAD_NAME + " TEXT, " 
              + KEY_NEW_LEAD_EMAIL+ " TEXT, " 
              + KEY_NEW_LEAD_MOBILE + " TEXT, " 
              + KEY_NEW_LEAD_Product + " TEXT, " 
              + KEY_NEW_LEAD_BUDGET + " TEXT, " 
              + KEY_NEW_LEAD_PRIORITY + " TEXT, " 
              + KEY_NEW_LEAD_STATUS + " TEXT, " 
              + KEY_NEW_LEAD_NOTES + " TEXT, " 
              + KEY_NEW_LEAD_REMINDER_DATE + " TEXT, " 
              + KEY_NEW_LEAD_REMINDER_TIME + " TEXT, " 
              + KEY_NEW_LEAD_ADDtoCONTACTS + " TEXT, " 
              + KEY_NEW_LEAD_CurrentDate + " TEXT "+");"; 

看看這個教程

Sqlite Integartion

+0

見的答覆,這是我的數據庫onCreate方法= @覆蓋 公共無效的onCreate(SQLiteDatabase _db) { _db.execSQL(DataBase_Adapter.DATABASE_CREATE_LOGIN); _db.execSQL(DataBase_Adapter.CREATE_NEW_LEAD_TABLE); } – tazeenmulani

+0

是的,我看到在上面的代碼,但你應該改變它。重寫的onCreate方法用於創建數據庫和表。你可以在這裏指定你的查詢。你不需要那個數據庫Adpapter類。 Create table語句不是在那裏調用的事件。如果你想要那個類,那麼它應該在構造函數中。但是避免這個班級會更好。 –

+0

,之前我的記錄插入後,我只添加了一列,它沒有被插入。並且在SQLIte瀏覽器顯示= Reminderdate字段文本,AddtoContactsTextcurrentdatefield Text.DataBase沒有獲取AddtoContact字段。 – tazeenmulani

1

沒有被正確創建數據庫。你還沒有把你的onCreate(SQLiteDatabase obj)方法放在課堂上。

檢查this project

並參見Vogella的this tutorial

這是可能的錯誤。

+0

我已經在上面發佈了這段代碼。@覆蓋 public void onCreate(SQLiteDatabase _db) { _db.execSQL(DataBase_Adapter.DATABASE_CREATE_LOGIN); _db.execSQL(DataBase_Adapter。CREATE_NEW_LEAD_TABLE); } – tazeenmulani

+0

感謝 – tazeenmulani

0

如果這是所有的代碼,

  • 你尚未在的任何位置調用CREATE_NEW_LEAD_TABLE命令3210的代碼,請檢查您是否延長從SQLiteOpenHelper和 類已經實現了這樣的方法,如onCreate(SQLIteDatabase db)onUpgrade()方法
  • ,如果是,你需要檢查,如果你是從一個已經 現有數據庫升級
  • 和如果是試圖改變DB_Version變量

,試試這個下面的代碼例如

public class dbHandler extends SQLiteOpenHelper{ 
static String DB_NAME="mapsDb"; 
static int DB_VERSION=1; 
String TAB_NAME="usertable"; 
String FILED_ID="id"; 
String FILED_DRIVERNAME="driver_name"; 
String FILED_CARNUMBER="cno"; 
String FILED_CARMODEL="cmodel"; 
String MARKER_TAB="markerTable"; 
String FILED_DRIVERID="id"; 
String FILED_LAT="latitude"; 
String FILED_LON="longtitude"; 
public static Context con; 
    public dbHandler(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
     // TODO Auto-generated constructor stub 
     this.con=context; 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     String CREATE_TABLE="CREATE TABLE "+TAB_NAME+" ("+FILED_ID+" TEXT PRIMARY KEY,"+FILED_DRIVERNAME+" TEXT,"+FILED_CARNUMBER+" TEXT,"+FILED_CARMODEL+" TEXT);"; 
     String CREATE_MARKE_TABLE="CREATE TABLE "+MARKER_TAB+" ("+FILED_DRIVERID+" TEXT,"+FILED_LAT+" TEXT,"+FILED_LON+" TEXT);"; 
     db.execSQL(CREATE_TABLE); 
     db.execSQL(CREATE_MARKE_TABLE); 
     //db.update(table, values, whereClause, whereArgs) 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS "+TAB_NAME); 
     db.execSQL("DROP TABLE IF EXISTS "+MARKER_TAB); 
     onCreate(db); 

    } 
    public void insertDriverDetails(String id, String name, 
      String cno, String mno) { 
     // TODO Auto-generated method stub 
     SQLiteDatabase db=this.getWritableDatabase(); 
     ContentValues cv=new ContentValues(); 
     cv.put(FILED_ID, id); 
     cv.put(FILED_DRIVERNAME, name); 
     cv.put(FILED_CARNUMBER, cno); 
     cv.put(FILED_CARMODEL, mno); 
     try{ 
     db.insert(TAB_NAME, null, cv); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     db.close(); 



    } 
    public void updateMarkerForId(String id, String longt, String lat) { 
     // TODO Auto-generated method stub 
     SQLiteDatabase db=this.getWritableDatabase(); 
     String UPDATE_QUERY="UPADATE "+MARKER_TAB+" SET "+FILED_LON+"=\""+longt+"\","+FILED_LAT+"\""+lat+"\" WHERE "+FILED_DRIVERID+"=\""+id+"\";"; 
     db.execSQL(UPDATE_QUERY); 
//  db.raw 
//  db.close(); 
    } 

} 
+0

我已經在onCreate方法中調用了我的CREATE_NEW_LEAD_TABLE命令,這是我在上面提到的問題。 – tazeenmulani

+0

你有沒有試過改變數據庫的版本 – insomniac

+0

,我要改變我的數據庫版本是4。 – tazeenmulani