这个问题在这里已经有答案了:
执行原始查询时出现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天,我尝试了很多方法,但没有一个单一的工作。请帮助我:(
1条答案
按热度按时间rslzwgfq1#
找不到列的最常见原因是不理解数据库处理程序oncreate方法何时运行。
oncreate方法在数据库的生存期内运行一次,而不是每次运行应用程序时都运行一次。
如果对数据库模式进行了更改,则需要删除数据库或通过onupgrade方法中的适当代码应用更改,同时增加传递给sqliteopenhelper的版本号(通常是超级调用中传递的第4个参数)。
我宁愿删除数据库,但任何现有的数据将丢失。可以通过设备资源管理器(如果access允许)或卸载应用程序来删除数据库。
卸载应用程序后,您可以重新运行该应用程序,并假设调用的新的/更改的sql正常,则将创建表。
如果您有需要保留的数据,那么最简单的方法可能是使用onupgrade方法,使用altertablesql(如果需要的话)来增加版本号。