android.database.sqlite.SQLite异常:接近"1":创建新表以存储数据时出现语法错误(代码 1)


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.SQLite异常:接近"1":语法 错误(代码 1):,编译时:创建表quiz_questions (_id 整数主键自动增量、问题文本、选项 1 文本、 选项 2 文本, 选项 3 文本, )

当我尝试创建问题表时,我收到语法错误(代码 1)。

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

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 + "文本" + ")";

不要使用空格作为列名。

错误:由以下原因引起:android.database.sqlite.SQLite异常:接近"1":语法错误(代码 1):,编译时:创建表quiz_questions(_id整数主键自动增量、问题文本、选项 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)

必须删除最后一列定义末尾的逗号。

但是,您发布的实际错误是生成的,因为您的列名中包含空格,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 " +
        ")";
...

但请注意,如果这样做,则必须在以后使用的任何查询中将对象名称括在双引号中。

最新更新