1

bi I making database with sqlite I was building a database and I had a problem.

That my screen full code:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:math';
import 'package:socialapp/model/todo.dart';
import 'package:socialapp/widgets/database_create.dart';



class writeprofile2 extends StatefulWidget {
  writeprofile2({Key key}) : super(key : key);

  @override
  _writeprofile2State createState() => _writeprofile2State();
}

class _writeprofile2State extends State<writeprofile2> {

  final _formKey = GlobalKey<FormState>();
  String _name, _age, _intro;


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Builder(
        builder: (context) => Center(
          child: Container(
            child: Container(
              child: Form(
                key: _formKey,
                child: Column(
                  children: <Widget>[
                    Padding(
                      padding: EdgeInsets.only(top: 70),
                      child: Text(
                        '프로필 작성',
                        style: TextStyle(
                          fontSize: 30,
                          fontWeight: FontWeight.w500,
                        ),
                      ),
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 10, bottom: 50),
                      child: Container(
                        height: 1,
                        width: MediaQuery.of(context).size.width / 1.4,
                        color: Colors.black26,
                      ),
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 10),
                      child: Container(
                        //이름입력
                        width: MediaQuery.of(context).size.width / 2,
                        height: MediaQuery.of(context).size.height / 20,
                        alignment: FractionalOffset.center,
                        decoration: BoxDecoration(
                          color: Colors.black12,
                          borderRadius:
                          BorderRadius.all(const Radius.circular(20)),
                        ),
                        child: TextFormField(
                          decoration: InputDecoration(
                            hintStyle: TextStyle(
                              fontSize: 20,
                            ),
                            border: InputBorder.none,
                            hintText: '이름',
                            prefixIcon: Icon(
                              Icons.person_outline,
                              color: Colors.black,
                            ),
                          ),
                          validator: (input) {
                            if (input.isEmpty) {
                              return '이름을 입력해주세요';
                            }
                          },
                          onSaved: (value)=> _name = value,
                        ),
                      ),
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 10),
                      child: Container(
                        width: MediaQuery.of(context).size.width / 2,
                        height: MediaQuery.of(context).size.height / 20,
                        alignment: FractionalOffset.center,
                        decoration: BoxDecoration(
                          color: Colors.black12,
                          borderRadius:
                          BorderRadius.all(const Radius.circular(20)),
                        ),
                        child: TextFormField(
                          keyboardType: TextInputType.number,
                          inputFormatters: [
                            WhitelistingTextInputFormatter.digitsOnly
                          ],
                          decoration: InputDecoration(
                            hintStyle: TextStyle(
                              fontSize: 20,
                            ),
                            border: InputBorder.none,
                            hintText: '나이',
                            prefixIcon: Icon(
                              Icons.label_outline,
                              color: Colors.black,
                            ),
                          ),
                          validator: (val) {
                            if (!isNumber(val)) {
                              return "나이를 입력해주세요";
                            };
                          },
                          onSaved: (value)=> _age = value,
                        ),
                      ),
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 10),
                      child: Container(
                        //이름입력
                        width: MediaQuery.of(context).size.width / 2,
                        height: MediaQuery.of(context).size.height / 20,
                        alignment: FractionalOffset.center,
                        decoration: BoxDecoration(
                          color: Colors.black12,
                          borderRadius:
                          BorderRadius.all(const Radius.circular(20)),
                        ),
                        child: TextFormField(
                          decoration: InputDecoration(
                            hintStyle: TextStyle(
                              fontSize: 20,
                            ),
                            border: InputBorder.none,
                            hintText: '소개',
                            prefixIcon: Icon(
                              Icons.person_outline,
                              color: Colors.black,
                            ),
                          ),
                          validator: (input) {
                            if (input.isEmpty) {
                              return '자기소개';
                            }
                          },
                          onSaved: (value)=> _intro = value,
                        ),
                      ),
                    ),
                    InkWell(
                      onTap: (){
                        Todo newtodo = Todo(name: _name, age: _age, intro: _intro);
                        DBHelper().createData(newtodo);
                        setState(() {
                        });
                      },
                      child: Padding(
                        padding: EdgeInsets.only(top: 50),
                        child: Container(
                          width: MediaQuery.of(context).size.width / 3,
                          height: MediaQuery.of(context).size.height / 20,
                          alignment: FractionalOffset.center,
                          decoration: BoxDecoration(
                            color: const Color.fromRGBO(250, 80, 100, 1),
                            borderRadius:
                            BorderRadius.all(const Radius.circular(30)),
                          ),
                          child: Text(
                            "Next",
                            style: TextStyle(
                              color: Colors.white,
                              fontSize: 20,
                              fontWeight: FontWeight.w500,
                              letterSpacing: 0.3,
                            ),
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }

  String randomTodo(){
    final randomNumber = Random().nextInt(4);
    String todo;
    switch(randomNumber){
      case 1:
        todo = 'hello1';
        break;
      case 1:
        todo = 'hello2';
        break;
      case 1:
        todo = 'hello3';
        break;
      default:
        todo = 'default';
        break;
    }
    return todo;
  }
}

bool isNumber(String valueNumber) {
  if (valueNumber == null) {
    return true;
  }
  final n = num.tryParse(valueNumber);
  return n != null;
}

That my todo Code :



class Todo {
  int id;
  String name;
  String intro;
  String age;

  Todo({
    this.id,
    this.name,
    this.intro,
    this.age,});

  factory Todo.fromJson(Map<String, dynamic> json) => Todo(
    id: json["id"],
    intro: json["intro"],
    name: json["name"],
    age: json["age"],
  );

  Map<String, dynamic> toJson() =>
      {
        'id' :id,
        'name': name,
        'age': age,
        'intro' : intro,
      };

}

That database create code:

import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
import 'package:socialapp/model/todo.dart';
import 'dart:async';
import 'dart:io';
import 'package:path/path.dart';


final String tableName = 'person';

class DBHelper{
  DBHelper._();
  static final DBHelper _db = DBHelper._();
  factory DBHelper() => _db;

  //해당 변수에 데이터베이스 정보 저장
  static Database _database;

  Future<Database> get database async{
    if(_database != null)return _database;

    _database = await initDB();
    return _database;
  }


  initDB() async{
    Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, 'PersonProfile.db');

    return await openDatabase(
      path,
      version: 1,
      onOpen: (db) {},
      onCreate: (Database db, int version) async{
        await db.execute('''
        CREATE TABLE $tableName
        id INTEGER PRIMARY KEY,
        name TEXT,
        intro TEXT,
        age TEXT ''');
      },
    );
  }


  createData(Todo todo)async{
    final db = await database;
    var res = await db.insert(tableName, todo.toJson());
    return res;
  }

  //read
  getTodo(int id) async{
    final db = await database;
    var res = await db.query(tableName, where: 'id = ?', whereArgs: [id]);
    return res.isNotEmpty ? Todo.fromJson(res.first) : Null;
  }

//  getAllTodos() async{
//    final db = await database;
//    var res = await db.query(tableNam
//  }
  updateTodo(Todo todo) async{
    final db = await database;
    var res = await db.update(tableName, todo.toJson(),
    where: 'id =?' , whereArgs: [todo.id]);
    return res;
  }

  //Delete
  deleteTodo(int id) async{
    final db = await database;
    db.delete(tableName, where: 'id =?', whereArgs: [id]);
  }

  deleteAllTodos() async{
    final db =await database;
    db.rawDelete("Delete * from $tableName");
  }
}



error code :

> 
> 
>     id INTEGER PRIMARY KEY,
>         name TEXT,
>         intro TEXT,
>         age TEXT flutter: error DatabaseException(Error Domain=FMDatabase Code=1 "near "id": syntax error"
> UserInfo={NSLocalizedDescription=near "id": syntax error}) sql '      
> CREATE TABLE person
>         id INTEGER PRIMARY KEY,
>         name TEXT,
>         intro TEXT,
>         age TEXT ' args []} during open, closing... [VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception:
> DatabaseException(Error Domain=FMDatabase Code=1 "near "id": syntax
> error" UserInfo={NSLocalizedDescription=near "id": syntax error}) sql
> '        CREATE TABLE person
>         id INTEGER PRIMARY KEY,
>         name TEXT,
>         intro TEXT,
>         age TEXT ' args []}
> #0      wrapDatabaseException (package:sqflite/src/exception_impl.dart:11:7) <asynchronous
> suspension>
> #1      SqfliteDatabaseFactoryImpl.wrapDatabaseException (package:sqflite/src/factory_impl.dart:29:7)
> #2      SqfliteDatabaseMixin.safeInvokeMethod (package:sqflite/src/database_mixin.dart:184:15)
> #3      SqfliteDatabaseMixin.invokeExecute (package:sqflite/src/database_mixin.dart:342:12)
> #4      SqfliteDatabaseMixin.txnExecute.<anonymous closure> (package:sqflite/src/database_mixin.dart:334:14)
> #5      SqfliteDatabaseMixin.txnSynchronized (package:sqflite/src/database_mixin.dart:285:26) <asynchronous
> suspension>
> #6      SqfliteDatabaseMixin.txnWriteSynchronized (package:sqflite/src/da<…>




How can i fix this ? 


1 Answer 1

4

You need to add parenthesis after the tableName:

 CREATE TABLE $tableName(
        id INTEGER PRIMARY KEY,
        name TEXT,
        intro TEXT,
        age TEXT)

Check here:

http://www.mysqltutorial.org/mysql-create-table/

Also check the example in the sqflite plugin:

  await db.execute(
      'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
});
Sign up to request clarification or add additional context in comments.

1 Comment

how to create multiple table in one database i checked dox and try but got error which is " Unhandled Exception: DatabaseException(no such table: profile (Sqlite code 1 SQLITE_ERROR): , while compiling: SELECT * FROM profile, (OS error - 2:No such file or directory)) sql 'SELECT * FROM profile' args [] "

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.