Database 颤振SQLite无此类柱

Database 颤振SQLite无此类柱,database,sqlite,flutter,dart,sqflite,Database,Sqlite,Flutter,Dart,Sqflite,我正在开发一个颤振应用程序,它使用SQLite数据库和颤振SQFlite插件。 问题是,当我尝试插入一些测试数据时,应用程序会在控制台中打印以下内容: Unhandled Exception: DatabaseException(no such column: dummy_value (code 1): , while compiling: INSERT INTO DemoTable (name) VALUES(dummy_value)) sql 'INSERT INTO DemoTable (

我正在开发一个颤振应用程序,它使用SQLite数据库和颤振SQFlite插件。 问题是,当我尝试插入一些测试数据时,应用程序会在控制台中打印以下内容:

Unhandled Exception: DatabaseException(no such column: dummy_value (code 1): , while compiling: INSERT INTO DemoTable (name) VALUES(dummy_value)) sql 'INSERT INTO DemoTable (name) VALUES(dummy_value)' args []}
据我从日志中了解,问题在于“dummy_value”列,但真正的问题在于,我的数据库有“id”列和“name”列,而“dummy_value”是要插入“name”列的值

以下是我创建数据库的代码:

class DatabaseCreator {
static const table = 'DemoTable';
static const id = 'id';
static const name = 'name';
static Database db;

initDatabase() async {
Directory documentsDirectory = await 
getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, 'Demo.db');
db = await openDatabase(path, version: 1, onCreate: _onCreate);
return db;
}

Future<void> _onCreate(Database db, int version) async {
await db.execute('''
      CREATE TABLE $table (
        $id INTEGER PRIMARY KEY AUTOINCREMENT,
        $name TEXT
      )
      ''');
  }
}
class DBOP {
static insertName(String name) async {
Database db = await DatabaseCreator().initDatabase();
final result = await db.rawInsert(
    'INSERT INTO ${DatabaseCreator.table} (${DatabaseCreator.name}) 
VALUES($name)');
print(result);
 }
}
最后,下面是我的有状态小部件:

class StFull extends StatefulWidget {
@override
_StFullState createState() => _StFullState();
}

class _StFullState extends State<StFull> {
@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    title: Text('DB Demo'),
  ),
  body: Container(
    child: RaisedButton(
      onPressed: _insertData,
      child: Text('INSERT DATA'),
    ),
    ),
  );
}

_insertData() {
DBOP.insertName('dummy_value');
 }
}
class StFull扩展StatefulWidget{
@凌驾
_StFullState createState()=>\u StFullState();
}
类StFullState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“DB演示”),
),
主体:容器(
孩子:升起按钮(
onPressed:_insertData,
子项:文本(“插入数据”),
),
),
);
}
_insertData(){
DBOP.insertName('dummy_value');
}
}

您应该对值(尤其是字符串)使用参数

而不是:

wait db.rawsert(
'插入到${DatabaseCreator.table}(${DatabaseCreator.name})值($name)');
做一些类似于:

wait db.rawsert(
'插入到${DatabaseCreator.table}(${DatabaseCreator.name})值(?),[name]);
或者更简单:

wait db.insert(DatabaseCreator.table,{DatabaseCreator.name:name});

我相信在insert语句中需要$name左右的单引号,例如“values('$name')”,感谢@mlewis54,它会尝试让您知道它不起作用,甚至会抛出语法错误:'(这可能是因为您在insert语句的字符串中使用了单引号。请将它们改为双引号:“insert…values”(“$name”)“@mlewis54..你是一个生活品味者,谢谢+1!这对我来说很有用!部分
等待db.rawinert('INSERT INTO${DatabaseCreator.table}(${DatabaseCreator.name})值(?),[name]);