База данных не хранит данные.Я получаю «SQLiteLog: (1) рядом с« Имя »: синтаксическая ошибка» из журнала Android Studio - PullRequest
0 голосов
/ 15 апреля 2019

Я получаю из «SQLiteLog: (1) рядом с« Имя »: синтаксическая ошибка» после вызова метода addPatient () и данные, предоставленные методом addPatient (), не сохраняются в базе данных. Сначала я подозреваю, что что-то может быть не так с моим запросом «CREATE TABLE», но я все перепробовал и не смог понять, что было не так.

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        //===============Create a table for Patient
        String query = "CREATE TABLE TABLE_PATIENT (COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "COLUMN_USERNAME TEXT, " +
                "COLUMN_PASSWORD TEXT, " +
                "COLUMN_FIRSTNAME TEXT, " +
                "COLUMN_LASTNAME TEXT, " +
                "COLUMN_AGE TEXT, " +
                "COLUMN_GENDER TEXT, " +
                "COLUMN_PHONE TEXT, " +
                "COLUMN_ADDRESS TEXT);";

        db.execSQL(query);
    }//End of onCreate()


    //Add a new Patient Row to the database
    public void addPatient(Patient patient)
    {
Log.i(TAG, "addPatient("+patient.getUserName()+")");
        ContentValues values = new ContentValues();
        values.put(COLUMN_ID, patient.getU_Id());
        values.put(COLUMN_USERNAME, patient.getUserName());
        values.put(COLUMN_PASSWORD, patient.getPassword());
        values.put(COLUMN_FIRSTNAME, patient.getFirstName());
        values.put(COLUMN_LASTNAME,patient.getLastName());
        values.put(COLUMN_AGE, patient.getAge());
        values.put(COLUMN_GENDER,patient.getGender());
        values.put(COLUMN_PHONE,patient.getPhoneNumber());
        values.put(COLUMN_ADDRESS, patient.getAddress());

        SQLiteDatabase db = getWritableDatabase();
try
{
    db.insert(TABLE_PATIENT, null, values);
    db.close();
}catch (Exception e)
{
    Log.i(TAG, e.getMessage());
}

    }//End of addPatient()

1 Ответ

0 голосов
/ 15 апреля 2019

Полагаю, вы определили эти переменные:

String COLUMN_ID = "id";
String COLUMN_USERNAME = "username";
....................................

или что-то в этом роде.
Если в именах столбцов есть пробелы, вы должны использовать квадратные скобки или галочки вокруг них, например:

String COLUMN_USERNAME = "[user name]";

В своем выражении CREATE TABLE вы определяете имена столбцов как:

"COLUMN_ID", "COLUMN_USERNAME", ....

потому что вы используете имена переменных, а не их значения.
Но в методе addPatient() вы помещаете значения в объект ContentValues, используя их действительные имена.
Чтобы решить вашу проблему, сначала удалите приложение с тестируемого устройства, чтобы удалить базу данных.
Затем измените оператор CREATE TABLE следующим образом:

String query = "CREATE TABLE " + TABLE_PATIENT +" (" + 
        COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        COLUMN_USERNAME + " TEXT, " +
        COLUMN_PASSWORD + " TEXT, " +
        COLUMN_FIRSTNAME + " TEXT, " +
        COLUMN_LASTNAME + " TEXT, " +
        COLUMN_AGE + " TEXT, " +
        COLUMN_GENDER + " TEXT, " +
        COLUMN_PHONE + " TEXT, " +
        COLUMN_ADDRESS + " TEXT)";

и перезапустите базу данных с правильными именами столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...