android.database.sqlite.SQLiteException: около «1»: синтаксическая ошибка (код 1) при создании новой таблицы для хранения данных - PullRequest
0 голосов
/ 26 декабря 2018
package com.example.android.minerals;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.example.android.minerals.QuizContract.*;

import java.util.ArrayList;
import java.util.List;

public class QuizDbHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "minerals.db";
    private static final int DATABASE_VERSION = 2;
    //private static final SQLiteDatabase.CursorFactory factory = null;

    private SQLiteDatabase db;
    public QuizDbHelper(Context context) {
        super( context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        this.db = db;

        final String SQL_CREATE_QUESTIONS_TABLE = "CREATE TABLE " +
                QuestionsTable.TABLE_NAME + " ( "+
                QuestionsTable._ID + " INTEGER PRIMARY KEY AUTOINCREMENT " +
                QuestionsTable.COLUMN_QUESTION + " TEXT, " +
                QuestionsTable.COLUMN_OPTION1 + " TEXT, " +
                QuestionsTable.COLUMN_OPTION2 + " TEXT, " +
                QuestionsTable.COLUMN_OPTION3 + " TEXT, " +
                ")";


        db.execSQL( SQL_CREATE_QUESTIONS_TABLE );
        fillQuestionsTable();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL( "DROP TABLE IF EXISTS " + QuestionsTable.TABLE_NAME);
        onCreate(db);

    }

}

Я получил ошибку.

Вызвано: android.database.sqlite.SQLiteException: около "1": синтаксическая ошибка (код 1): при компиляции: CREATE TABLE quiz_questions(_id INTEGER PRIMARY KEY AUTOINCREMENT, текст TEXT, опция 1 TEXT, опция 2 TEXT, опция 3 TEXT,)

Я получаю синтаксическую ошибку (код 1) при попытке создать таблицу вопросов.

Ответы [ 4 ]

0 голосов
/ 26 декабря 2018

Запятая в конце определения последнего столбца должна быть удалена.

Но фактическая ошибка, которую вы разместили, генерируется, потому что у вас есть имена столбцов с пробелами, option 1.Парсер считает, что имя столбца option и не знает, что делать с 1.Я настоятельно рекомендую не иметь имен столбцов (или имен любых объектов) с пробелами (или любыми другими символами, кроме буквенно-цифровых символов и подчеркивания), что только приводит к проблемам.Однако если вы настаиваете на использовании таких имен, вы должны заключить их в двойные кавычки.

...
final String SQL_CREATE_QUESTIONS_TABLE = "CREATE TABLE " +
        "\"" + QuestionsTable.TABLE_NAME + "\" ( "+
        "\"" + QuestionsTable._ID + "\" INTEGER PRIMARY KEY AUTOINCREMENT " +
        "\"" + QuestionsTable.COLUMN_QUESTION + "\" TEXT, " +
        "\"" + QuestionsTable.COLUMN_OPTION1 + "\" TEXT, " +
        "\"" + QuestionsTable.COLUMN_OPTION2 + "\" TEXT, " +
        "\"" + QuestionsTable.COLUMN_OPTION3 + "\" TEXT " +
        ")";
...

Но имейте в виду, что если вы сделаете это, вы должны заключить имя объекта в двойные кавычки в any запрос, который вы используете позже.

0 голосов
/ 26 декабря 2018
Caused by: android.database.sqlite.SQLiteException: near "1": syntax error (code 1): , while compiling:

Исключение SQLite, которое указывает на ошибку при разборе или выполнении SQL.

Вы должны удалить последнюю запятую в своем выражении , "+") ";

Попробуйте с

private static final String SQL_CREATE_QUESTIONS_TABLE = "CREATE TABLE IF NOT EXISTS "
        + QuestionsTable.TABLE_NAME + "(" + QuestionsTable._ID
        + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + QuestionsTable.COLUMN_QUESTION + " TEXT NOT NULL, "
        + QuestionsTable.COLUMN_OPTION1 + " TEXT NOT NULL, "
        + QuestionsTable.COLUMN_OPTION2 + " TEXT NOT NULL, "
        + QuestionsTable.COLUMN_OPTION3 + " TEXT NOT NULL )";

Тогда Clean-Rebuild-Run

0 голосов
/ 26 декабря 2018

Не используйте пустое место для имени столбца.

ошибка: вызвана: android.database.sqlite.SQLiteException: около "1": синтаксическая ошибка (код 1): при компиляции: CREATE TABLE quiz_questions(_id INTEGER PRIMARY KEY AUTOINCREMENT, ТЕКСТ вопроса, опция 1 ТЕКСТ, опция 2 ТЕКСТ, опция 3 ТЕКСТ,)

решение: Удалить пробел из имени столбца.

Используйте вместо опции option_1, option_2, option_3варианта 1, варианта 2, варианта 3.

А также удалите последнюю запятую из запроса.

Ваш запрос должен быть таким, как показано ниже,

CREATE TABLE quiz_questions ( _id INTEGER PRIMARY KEY AUTOINCREMENT, question TEXT, option_1 TEXT, option_2 TEXT, option_3 TEXT)
0 голосов
/ 26 декабря 2018
final String SQL_CREATE_QUESTIONS_TABLE = "CREATE TABLE " +
                QuestionsTable.TABLE_NAME + " ( "+
                QuestionsTable._ID + " INTEGER PRIMARY KEY AUTOINCREMENT " +
                QuestionsTable.COLUMN_QUESTION + " TEXT, " +
                QuestionsTable.COLUMN_OPTION1 + " TEXT, " +
                QuestionsTable.COLUMN_OPTION2 + " TEXT, " +
                QuestionsTable.COLUMN_OPTION3 + " TEXT, " +
                ")";

изменить это на:

final String SQL_CREATE_QUESTIONS_TABLE = "CREATE TABLE " +
                QuestionsTable.TABLE_NAME + " ( "+
                QuestionsTable._ID + " INTEGER PRIMARY KEY AUTOINCREMENT " +
                QuestionsTable.COLUMN_QUESTION + " TEXT, " +
                QuestionsTable.COLUMN_OPTION1 + " TEXT, " +
                QuestionsTable.COLUMN_OPTION2 + " TEXT, " +
                QuestionsTable.COLUMN_OPTION3 + " TEXT " +
                ")";

удалить запятую после имени последнего столбца, который является ТЕКСТ QuestionsTable.COLUMN_OPTION3 + "TEXT" + ")";

...