android - 使用内容值将数据插入数据库时出错
问题描述
我正在尝试在数据库中插入数据,但它给了我以下错误。
表 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" +
"); ";
请帮助我我做错了什么......
解决方案
未找到列的最常见原因是输入错误和对onCreate方法的误解。
如果您始终使用单一来源作为列名,例如,如果您使用PlaceContract.PlaceEntry.COLUMN_PLACE_NAME
引用 place_name 列,则前者不太可能。
对于后者,onCreate 方法仅在创建数据库时自动运行,对架构所做的任何更改(例如添加列)都不会应用。因此,如果您更改 CREATE SQL 字符串以添加 PLACE_NAME 列,则不会添加该列。
在开发应用程序时,当数据可能丢失时,可以通过三种快速方法来纠正这种情况。
- 删除App的数据并重新运行(数据库将被删除(除非数据库存储在App之外(不推荐也不是典型场景))。
- 卸载应用程序并重新运行(同时删除应用程序的数据)。
- 如果onUpgrade将删除所述表或表然后重新创建表(通常通过调用onCreate方法),则可以增加数据库版本(这是构造 Database Helper 类时 super 调用的第 4 个参数(即类扩展 SQLiteOpenHelper))。
如果数据库中的数据不能丢失,那么另一种方法是使用 ALTER 添加列或创建另一个表,从原表中复制数据,然后删除原表并使用 ALTER 将新表重命名为成为原始表。
推荐阅读
- azure - 如何修复为 Linux 上托管的 Azure Function Core 创建事件网格订阅的错误?
- python - Optimizing dictionary look up using dict.items() for large dataset
- reactjs - Rendering when mapping over normalized redux state
- node.js - Node JS web application deployment
- css - Material-UI change TextField color when input text is too long
- c# - How to record video with device camera in Unity?
- python - 将 column1 中的所有唯一项过滤为 Key,将 Column2 和 Column3 过滤为 key:value 作为来自常规 DataFrame 的嵌套 Dataframe 中的 Value
- java - Jersey 项目 Swagger-UI 在发送 @PathParam 时不发送 @HeaderParam
- csv - 将批量数据加载到 MariaDB 并报告错误
- dart - 由于 state.didChange() 调用,在 Forms 中使用时会出现缓慢的 Cupertino 输入字段