2013-12-17 4 views
1

Я хочу, чтобы вставить 10 до 15 столбцов в базе данных SQLite, но при запуске приложения он показывает сообщение об ошибке:Ошибка вставки данных с базой данных SQLite в Android

SQLite вернулся: код ошибки = 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

Где вы создать д atabase? i не вижу кода для этого – 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 метод = @Override общественного недействительный 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 отображается как текст поля напоминания, AddtoContactsTextcurrentdatefield Text.DataBase не получает поле AddtoContact. – tazeenmulani

1

Ваша база данных не создается правильно. Вы не разместили свой метод onCreate(SQLiteDatabase obj) в классе.

Проверить this project.

И см. this tutorial от Vogella.

Это вероятная ошибка.

+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 в любом месте код, проверьте, если вы расширили класс от 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

Я уже вызываю команду CREATE_NEW_LEAD_TABLE в методе onCreate, которую я должен опубликовать выше в своем вопросе. – tazeenmulani

+0

Вы пытались изменить версию базы данных – insomniac

+0

, Yah Мне нужно изменить мою версию базы данных 4. – tazeenmulani

Смежные вопросы