Flutter DataBaseException(表category_Table没有名为category_id的列)

时间:2019-05-08 20:51:21

标签: dart flutter sqflite

我正在尝试从json对象插入数据,以下代码是我使用的表的

我这样定义了数据库帮助程序类:

class DatabaseHelper {

    static DatabaseHelper _databaseHelper;    // Singleton DatabaseHelper
    static Database _database;                // Singleton Database

    String category_Table = 'category_Table';
  String category_id  = 'category_id';
    String device_type_id = 'device_type_id';
    String room_id  = 'room_id ';
...

await db.execute(
      'CREATE TABLE $category_Table($category_id INTEGER PRIMARY KEY UNIQUE  , $device_type_id INTEGER, '
                '$room_id INTEGER)');
        print('category created!');

这是插入功能

        Database db = await this.database;
    var result = await db.insert(category_Table, category.toMap());
    print('category inserted');
        return result;


    }

这是错误

Exception has occurred.
SqfliteDatabaseException (DatabaseException(table category_Table has no column named category_id (code 1): , while compiling: INSERT INTO category_Table (category_id, device_type_id, room_id) VALUES (?, ?, ?)) sql 'INSERT INTO category_Table (category_id, device_type_id, room_id) VALUES (?, ?, ?)' args [1, 1, 1]})

感谢您的帮助:)

5 个答案:

答案 0 :(得分:0)

我用于MAP方法的变量与命令中的数据库帮助程序类不同

答案 1 :(得分:0)

1)首先检查您在模型中使用的变量文本是否相同,Map是否与列相同名称

2)更新数据库版本号

3)在手机或仿真器上卸载并重新安装该应用程序。

答案 2 :(得分:0)

对我来说,该错误是由于上一列之后缺少逗号和空格引起的。 我所拥有的:

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

final String categoryTable = "categoryTable";
final String idColumn = "idColumn";
final String nameColumn = "nameColumn";
final String weightColumn = "weightColumn";
final String typeColumn = "typeColumn";
final String gradeColumn = "gradeColumn";
final String professorColumn = "professorColumn";
final String colorColumn = "colorColumn";

db.execute(
  "CREATE TABLE $categoryTable("
    "$idColumn INTEGER PRIMARY KEY, "
    "$nameColumn TEXT, "
    "$weightColumn NUMERIC, "
    "$typeColumn NUMERIC" // <- missing comma and space
    "$professorColumn TEXT, " // Error when I try to add something to this column
    "$colorColumn TEXT)"
);

为我解决的是:

db.execute(
  "CREATE TABLE $categoryTable("
    "$idColumn INTEGER PRIMARY KEY, "
    "$nameColumn TEXT, "
    "$weightColumn NUMERIC, "
    "$typeColumn NUMERIC, " // <- Fixed the error
    "$professorColumn TEXT, "
    "$colorColumn TEXT)"
);

答案 3 :(得分:0)

尝试删除应用程序存储并重新安装,因为您可能已经以错误或旧的方式甚至丢失了列在手机上创建了数据库文件。如果正确使用了SQFLite,则可以重新开始。

答案 4 :(得分:0)

我遇到了这个问题,我尝试了完全不同的事情,但最后,对我有用的写在下面

第一步:修改数据库版本号

之前是这样的

 static final dbVersion = 1;

我后来改成

static final dbVersion = 5;

这是我初始化数据库的函数。我正在创建一个包含四列的表格,即 ID、标题、描述和日期。

    Future _initDatabase() async {
    Directory _directory = await getApplicationDocumentsDirectory();
    var path = join(_directory.path, dbName);
    print(path);
    return await openDatabase(path, version: dbVersion,//here is the dbVersion
        onCreate: (Database db, int dbVersion) async {
      await db.execute(
          'CREATE TABLE $table($colId INTEGER PRIMARY KEY AUTOINCREMENT, $colTitle TEXT, $colDescription TEXT, $colDate TEXT)');
    });
  }

第 2 步:清除所有应用数据,然后重新运行应用。

希望你的问题得到解决:)