首页 > 解决方案 > 使用内容值将数据插入数据库时​​出错

问题描述

我正在尝试在数据库中插入数据,但它给了我以下错误。

表 places 没有名为 PLACE_NAME (code 1): 的列,编译时:INSERT INTO places(PLACE_NAME,IS_SELECTED,placeID,LONGITUDE,LATITUDE) VALUES (?,?,?,?,?)

这是我创建数据库表的方式

 // Create a table to hold the places data
    final String SQL_CREATE_PLACES_TABLE = "CREATE TABLE IF NOT EXISTS " + PlaceContract.PlaceEntry.TABLE_NAME + " (" +
            PlaceContract.PlaceEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + PlaceContract.PlaceEntry.COLUMN_PLACE_NAME + " VARCHAR, " +
            PlaceContract.PlaceEntry.COLUMN_PLACE_LATITUDE +  " VARCHAR, " +  PlaceContract.PlaceEntry.COLUMN_PLACE_LONGITUDE +  " VARCHAR, "+
            PlaceContract.PlaceEntry.COLUMN_PLACE_IS_SELECTED +  " VARCHAR, " +
            PlaceContract.PlaceEntry.COLUMN_PLACE_ID + " TEXT NOT NULL, " +
            "UNIQUE (" + PlaceContract.PlaceEntry.COLUMN_PLACE_ID + ") ON CONFLICT REPLACE" +
            "); ";

请帮助我我做错了什么......

标签: androidsqliteandroid-sqlite

解决方案


未找到列的最常见原因是输入错误和对onCreate方法的误解。

如果您始终使用单一来源作为列名,例如,如果您使用PlaceContract.PlaceEntry.COLUMN_PLACE_NAME引用 place_name 列,则前者不太可能。

对于后者,onCreate 方法仅在创建数据库时自动运行,对架构所做的任何更改(例如添加列)都不会应用。因此,如果您更改 CREATE SQL 字符串以添加 PLACE_NAME 列,则不会添加该列。

在开发应用程序时,当数据可能丢失时,可以通过三种快速方法来纠正这种情况。

  1. 删除App的数据并重新运行(数据库将被删除(除非数据库存储在App之外(不推荐也不是典型场景))。
  2. 卸载应用程序并重新运行(同时删除应用程序的数据)。
  3. 如果onUpgrade将删除所述表或表然后重新创建表(通常通过调用onCreate方法),则可以增加数据库版本(这是构造 Database Helper 类时 super 调用的第 4 个参数(即类扩展 SQLiteOpenHelper))。

如果数据库中的数据不能丢失,那么另一种方法是使用 ALTER 添加列或创建另一个表,从原表中复制数据,然后删除原表并使用 ALTER 将新表重命名为成为原始表。


推荐阅读