tazeenmulani
tazeenmulani

Reputation: 592

Error inserting data with SQLite database in Android

I want to insert 10 to 15 columns in SQLite database but when I run the application it shows error message:

sqlite returned: error code = 1, msg = table new_lead has no column named add_to_contacts

and getting SQLite Exception while inserting data in SQLite database.

Here is my database code.

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);
    }

}

Here is my code for database adapter.

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();

          }

}

Here is my activity code for inserting data.

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);

The log cat stack trace info

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)

Upvotes: 1

Views: 2663

Answers (3)

insomniac
insomniac

Reputation: 11766

If that's all your code,

  • You haven't called the CREATE_NEW_LEAD_TABLE Command anywhere in the code,check if you extended the class from SQLiteOpenHelper and have implemented the methods such as onCreate(SQLIteDatabase db) and onUpgrade() methods
  • and if yes,you need to check if you are upgrading from an already existing database
  • and if yes try to change the DB_Version variable

,try this below code for example

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();
    }

}

Upvotes: 0

Vaibhav Agarwal
Vaibhav Agarwal

Reputation: 4499

You should include this method in onCreate() of your helper class

  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 "+");"; 

look at this tutorial

Sqlite Integartion

Upvotes: 1

Veer Shrivastav
Veer Shrivastav

Reputation: 5496

Your database is not being created correctly. You have not placed your onCreate(SQLiteDatabase obj) method in the class.

Check this project.

And see this tutorial by Vogella.

This is the probable error.

Upvotes: 1

Related Questions