Java 在Android中使用SQLite数据库插入数据时出错

Java 在Android中使用SQLite数据库插入数据时出错,java,android,android-sqlite,Java,Android,Android Sqlite,我想在SQLite数据库中插入10到15列,但当我运行应用程序时,它会显示错误消息: sqlite返回:错误代码=1,msg=table new\u lead没有名为add\u to\u contacts的列 以及在SQLite数据库中插入数据时获取SQLite异常 这是我的数据库代码 public class DataBaseHelper extends SQLiteOpenHelper { public DataBaseHelper(Context context, Stri

我想在SQLite数据库中插入10到15列,但当我运行应用程序时,它会显示错误消息:

sqlite返回:错误代码=1,msg=table new\u lead没有名为add\u to\u 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);
日志cat堆栈跟踪信息

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=g@g.c 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)
12-17 11:28:57.703:E/数据库(336):插入预算时出错=7878提醒时间=2:27组织=战争添加到联系人=真实状态=打开电子邮件=g@g.c优先级=中等当前日期=2013年12月17日姓名=gt定义产品=提醒日期=2014年3月17日备注=vhbgjhngk mobile=56768
12-17 11:28:57.703:E/Database(336):android.Database.sqlite.SQLiteException:表格new_lead没有名为add_to_contacts:的列,编译时:插入new_lead(预算、提醒时间、组织、添加_to_contacts、状态、电子邮件、优先级、当前_日期、名称、定义_产品、提醒_日期、备注、手机)值(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
12-17 11:28:57.703:E/Database(336):在android.Database.sqlite.SQLiteCompiledSql.native_compile(native方法)
12-17 11:28:57.703:E/Database(336):在android.Database.sqlite.SQLiteCompiledSql.compiled(SQLiteCompiledSql.java:92)
12-17 11:28:57.703:E/Database(336):在android.Database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:65)
12-17 11:28:57.703:E/Database(336):在android.Database.sqlite.SQLiteProgram.(SQLiteProgram.java:83)
12-17 11:28:57.703:E/Database(336):位于android.Database.sqlite.SQLiteStatement.(SQLiteStatement.java:41)
12-17 11:28:57.703:E/Database(336):位于android.Database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
12-17 11:28:57.703:E/Database(336):在android.Database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
12-17 11:28:57.703:E/Database(336):位于android.Database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
12-17 11:28:57.703:E/数据库(336):在com.lead\u management\u project.Database\u Adapter.insert\u NewLead\u条目(Database\u Adapter.java:245)
12-17 11:28:57.703:E/数据库(336):在com.lead_management_project.New_lead_Activity5$9.onClick(New_lead_Activity5.java:411)
12-17 11:28:57.703:E/Database(336):在android.view.view.performClick(view.java:2485)
12-17 11:28:57.703:E/数据库(336):在android.view.view$PerformClick.run(view.java:9080)
12-17 11:28:57.703:E/Database(336):在android.os.Handler.handleCallback(Handler.java:587)
12-17 11:28:57.703:E/Database(336):在android.os.Handler.dispatchMessage(Handler.java:92)
12-17 11:28:57.703:E/Database(336):在android.os.Looper.loop(Looper.java:123)
12-17 11:28:57.703:E/Database(336):位于android.app.ActivityThread.main(ActivityThread.java:3683)
12-17 11:28:57.703:E/Database(336):位于java.lang.reflect.Method.Invokenactive(本机方法)
12-17 11:28:57.703:E/Database(336):位于java.lang.reflect.Method.invoke(Method.java:507)
12-17 11:28:57.703:E/Database(336):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-17 11:28:57.703:E/Database(336):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-17 11:28:57.703:E/数据库(336):在dalvik.system.NativeStart.main(本机方法)

您的数据库没有正确创建。您没有将
onCreate(SQLiteDatabase obj)
方法放置在类中

检查

沃格拉看


这可能是错误。

您应该在助手类的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 "+");"; 
请看本教程


如果这就是你的全部代码

  • 您尚未在中的任何位置调用
    CREATE\u NEW\u LEAD\u 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();
    }

}

你在哪里创建数据库?我看不到数据库的代码that@insomniac,我必须发布我的数据库代码。请看,这是我的数据库onCreate方法=@Override public void onCreate(SQLiteDatabase _db){_db.execSQL(database_Adapter.database_CREATE_LOGIN);_db.execSQL(database_Adapter.CREATE_NEW_LEAD_TABLE);}是的,我在上面的代码中看到了这一点,但是你应该修改它。重写的onCreate方法用于创建数据库和表。你可以在这里指定你的查询。你不需要数据库ADAPTER类。create table语句不是在那里被调用的事件。如果你想要那个类,那么它应该在构造函数中。但是最好o避免该类。之前,我的记录是插入的,在此之后,我只添加了一列,但未插入。在SQLIte浏览器中,显示like=employerDate字段文本,addToContactsExtCurrentDateField文本。数据库未获取AddtoContact字段。从仿真器设备卸载应用程序,清除它并重新生成,然后重新安装所有并再次运行感谢您的帮助,我只是删除了onCreate()的@Override在我的Dtabase类中。谢谢你的帮助。我已经在onCreate方法中调用了CREATE_NEW_LEAD_TABLE命令,这是我在上面的问题中必须发布的。是的,我必须更改我的数据库版本为4。我已经在上面发布了这行代码。@重写public void onCreate(SQLiteDatabase _db){db.execSQL(数据库_适配器.数据库_创建_登录);_db.execSQL(数据库_适配器.创建_新_LEAD_表);}