android studio sqlite错误,数据库中没有名为name的列请帮助我被这个错误困住了

yyhrrdl8  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(500)

这个问题在这里已经有答案了

执行原始查询时出现android sqlite列未找到错误(1个答案)
未找到sqlite android列(1个答案)
两天前关门了。
这是我通过android studio得到的错误。请帮助。。。
这里它包含错误开始的第47行。
这是我的databasehandler中的addcontact方法。
[这是databasehandler的oncreate方法,您也可以在其中检查查询。请帮忙。。。。
]4
如果上面的图片不可用,您可以参考这些代码示例。
这是我运行应用程序时收到的错误

E/SQLiteLog: (1) table contacts_table has no column named name
E/SQLiteDatabase: Error inserting phone_number=9090909090 name=Harry
    android.database.sqlite.SQLiteException: table contacts_table has no column named name (code 1 SQLITE_ERROR): , while compiling: INSERT INTO contacts_table(phone_number,name) VALUES (?,?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:988)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:593)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:33)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1597)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1468)
        at com.example.dbdemo.data.MyDbHandler.addContact(MyDbHandler.java:52)
        at com.example.dbdemo.MainActivity.onCreate(MainActivity.java:47)
        at android.app.Activity.performCreate(Activity.java:7873)
        at android.app.Activity.performCreate(Activity.java:7862)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3277)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3441)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2045)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7405)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:502)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980)

这是databasehandler类的oncreate方法,您可以在其中看到创建表的查询。我不明白为什么在我创建name列的时候它却显示name列没有被创建。这是密码。。。。

@Override
public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE " + Params.TABLE_NAME + "("
            + Params.KEY_ID + " INTEGER PRIMARY KEY ," + Params.KEY_NAME
            + " TEXT NOT NULL, " + Params.KEY_PHONE + " TEXT NOT NULL);" ;

    Log.d("dbjarvis", "Query being run is : "+ createTable);

    db.execSQL(createTable);

    Log.d("dbjarvis","succesfully executed database  query.");
}

现在这里有一个代码示例,我在其中创建联系人并添加它们。。。

// Creating a contact object for the db
    Contact harry = new Contact();
    harry.setPhoneNumber("9090909090");
    harry.setName("Harry");

    Contact deepanshu = new Contact();
    deepanshu.setName("Deepanshu");
    deepanshu.setPhoneNumber("89903249069");

    // Adding a contact to the db
    db.addContact(harry);
    db.addContact(deepanshu);

下面是我的databasehandler类的addcontact方法的最后一个代码示例。也请检查一下。这是密码。。。

public void addContact(Contact contact){
    Log.d("dbjarvis","addContact method is started running.");
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(Params.KEY_NAME, contact.getName());
    values.put(Params.KEY_PHONE, contact.getPhoneNumber());

    db.insert(Params.TABLE_NAME, null, values);
    Log.d("dbharry", values+" Successfully inserted");
    db.close();
    Log.d("dbjarvis","addContact method is finished here .");

}

一切刚刚结束…请帮帮我。。我被困在这从4-5天,我尝试了很多方法,但没有一个单一的工作。请帮助我:(

rslzwgfq

rslzwgfq1#

找不到列的最常见原因是不理解数据库处理程序oncreate方法何时运行。
oncreate方法在数据库的生存期内运行一次,而不是每次运行应用程序时都运行一次。
如果对数据库模式进行了更改,则需要删除数据库或通过onupgrade方法中的适当代码应用更改,同时增加传递给sqliteopenhelper的版本号(通常是超级调用中传递的第4个参数)。
我宁愿删除数据库,但任何现有的数据将丢失。可以通过设备资源管理器(如果access允许)或卸载应用程序来删除数据库。
卸载应用程序后,您可以重新运行该应用程序,并假设调用的新的/更改的sql正常,则将创建表。
如果您有需要保留的数据,那么最简单的方法可能是使用onupgrade方法,使用altertablesql(如果需要的话)来增加版本号。

相关问题