TABLE_NAME не имеет столбца COLUMN_NAME - PullRequest
0 голосов
/ 07 апреля 2020

Я получаю эту ошибку, когда пишу данные в тексте редактирования и нажимаю сохранить

2020-04-07 18:30:53.114 5580-5580/com.example.app100 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
2020-04-07 18:30:53.115 5580-5580/com.example.app100 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
2020-04-07 18:30:59.915 5580-5580/com.example.app100 E/SQLiteLog: (1) table SUBJECT_LIST has no column named MIN_TO
2020-04-07 18:30:59.916 5580-5580/com.example.app100 E/SQLiteDatabase: Error inserting MIN_TO=0 HRS_FROM=0 MIN_FROM=0 NAME=subject CREDITS=41 HRS_TO=0 from {P:5580;U:10348}
    android.database.sqlite.SQLiteException: table SUBJECT_LIST has no column named MIN_TO (code 1 SQLITE_ERROR): , while compiling: INSERT INTO SUBJECT_LIST(MIN_TO,HRS_FROM,MIN_FROM,NAME,CREDITS,HRS_TO) VALUES (?,?,?,?,?,?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:986)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:593)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:33)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1637)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1494)
        at com.example.app100.DatabaseHelper.addData(DatabaseHelper.java:59)
        at com.example.app100.AddSubject.AddData(AddSubject.java:46)
        at com.example.app100.AddSubject.access$000(AddSubject.java:12)
        at com.example.app100.AddSubject$1.onClick(AddSubject.java:40)
        at android.view.View.performClick(View.java:7201)
        at android.view.View.performClickInternal(View.java:7170)
        at android.view.View.access$3500(View.java:806)
        at android.view.View$PerformClick.run(View.java:27562)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7682)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

Класс DataHelper:

package com.example.app100;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.ContentView;
import androidx.annotation.Nullable;

public class DatabaseHelper extends SQLiteOpenHelper {


    private static final String table_name = "SUBJECT_LIST";
    private static final String COL1 = "ID";
    private static final String COL2 = "NAME";
    private static final String COL3 = "HRS_FROM";
    private static final String COL4 = "MIN_FROM";
    private static final String COL5 = "HRS_TO";
    private static final String COL6 = "MIN_TO";
    private static final String COL7 = "CREDITS";


    public DatabaseHelper(@Nullable Context context) {
        super(context, table_name, null, 3);
    }



    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_TABLE = "CREATE TABLE " + table_name + "("+COL1+ " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                COL2 + "TEXT, " +
                COL3 + "INTEGER, " +
                COL4 + "INTEGER, " +
                COL5 + "INTEGER, " +
                COL6 + "INTEGER, " +
                COL7 + "INTEGER);";
        db.execSQL(CREATE_TABLE);
    }

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

    public boolean addData(String name , int  h1 , int m1 , int h2 , int m2, int credit ){
        SQLiteDatabase db =  this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL2 , name);
        contentValues.put(COL3 , h1);
        contentValues.put(COL4 , m1);
        contentValues.put(COL5 , h2);
        contentValues.put(COL6 ,m2);
        contentValues.put(COL7 , credit);

        long result = db.insert(table_name , null , contentValues);
        return result != -1;
    }

    public Cursor getdata(){
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "SELECT * FROM " +table_name;
        return db.rawQuery(query , null);
    }
}

Когда я удаляю упомянутый столбец в ошибке из моего база данных Я получаю сообщение об ошибке: отсутствует другой столбец.

Я попытался изменить версию базы данных и переустановить приложение, но это не сработало. После нескольких попыток приложение вылетает.

Пожалуйста, помогите

1 Ответ

1 голос
/ 07 апреля 2020

Вам нужны пробелы между именами и типами столбцов. Измените

COL2 + "TEXT, " +

на

COL2 + " TEXT, " +

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

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