使用内容值将数据插入数据库时​​出错

时间:2019-05-17 16:29:16

标签: android sqlite android-sqlite

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

  

表位置没有名为PLACE_NAME(代码1)的列:,正在编译:INSERT INTO place(PLACE_NAME,IS_SELECTED,placeID,LONGITUDE,LATITUDE)值(?,?,?,?,?)

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

  1. 删除应用程序的数据并重新运行(数据库将被删除(除非数据库存储在应用程序外部(不推荐,并且不是典型情况))。
  2. 卸载该应用并重新运行(还删除该应用的数据)。
  3. IF onUpgrade 将删除所述一个或多个表,然后重新创建表(通常通过调用 onCreate 方法),然后重新创建数据库可以增加版本(这是构造Database Helper类(即扩展SQLiteOpenHelper的类)时超级调用的第四个参数)。

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