Список вставок Flutter sqflite ‹String›

Я пытаюсь вставить список в базу данных sql во флаттере, но я не знаю, как это сделать, может ли кто-нибудь мне помочь?

у меня это когда я инициализирую базу данных mi:

Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, "tuCuestionarioDB.db");
    return await openDatabase(path, version: 1, onOpen: (db) {},
        onCreate: (Database db, int version) async {
      await db.execute("CREATE TABLE Question ("
          "id INTEGER PRIMARY KEY,"
          "subject INTEGER,"
          "topic INTEGER,"
          "question TEXT,"
          "answer INTEGER,"
          "answers TEXT ARRAY," //THIS IS MY LIST<STRING>
          "rightAnswer INTEGER,"
          "correctly BIT,"
          "answered BIT"
          ")");
    });

и у меня есть это для вставки данных:

 newQuestion(Question newQuestion) async {
     final db = await database;
    //get the biggest id in the table
    var table = await db.rawQuery("SELECT MAX(id)+1 as id FROM Question");
    int id = table.first["id"];
    //insert to the table using the new id
    var raw = await db.rawInsert(
        "INSERT Into Question (id,subject,topic,question,answer,answers,rightAnswer,correctly,answered)"
        " VALUES (?,?,?,?,?,?,?,?,?)",
        [id != null ? id : 0, newQuestion.subject, newQuestion.topic,newQuestion.question,newQuestion.answer,newQuestion.answers,newQuestion.rightAnswer,newQuestion.correctly ? 1 : 0,newQuestion.answered ? 1 : 0]);
    return raw;
  }

но когда вы пытаетесь вставить такое значение:

{subject: 1, topic: 1, question: What is the best community?, answer: 3, rightAnswer: 0, answers: [Stack Overflow, Facebook, Yahoo Answers], correctly: false, answered: false}

у меня такая ошибка:

Произошло исключение.

SqfliteDatabaseException (DatabaseException (java.lang.String не может быть преобразовано в java.lang.Integer) sql ‘INSERT Into Question (id, subject, topic, question, answer, answers, rightAnswer, правильно, ответил) ЗНАЧЕНИЯ (?,?,? ,?,?,?,?,?,?) ‘args [0, 1, 1, Какое сообщество лучше всего ?, 3, [Stack Overflow, Facebook, Answers Yahoo], 0, 0, 0]})

и когда я удаляю поле anwsers, у меня нет ошибок

См. также:  Flutter загружает изображение в хранилище firebase, а затем записывает его в хранилище firestore
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Bryansq2nt

    Я почти уверен, что вы не можете хранить список строк таким образом. Согласно docs, он поддерживает только большой двоичный объект. инц. Я думаю, есть два способа сделать это.

    Один из способов — объединить ответы в одну строку. Вы можете использовать метод присоединиться и разделить его символом, который не будет содержать ответа (возможно, вертикальной чертой, например |). Затем, когда вы читаете из базы данных, вы можете разделить строку обратно в массив, используя выбранный вами символ.

    Другой способ сделать это — создать таблицу, которая связывает один вопрос с несколькими ответами. Это в основном код sudo, но если у вас есть таблица, которая ему соответствует, она должна работать.

    Answer
    
    int id autoincremented, int questionId, String answerText, int isCorrectAnswer (0 or 1)
    

    Кроме того, это немного не связано, но sqflite поддерживает ключевое слово AUTOINCREMENT, которое я рекомендую вам использовать для идентификаторов ваших первичных ключей.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: