Sameen Kazi Ответов: 1

Ошибка вставки руководитель от лвэ=нуль телефона=null имя=значение null aptno=нуль назначение=значение null.... Таблица visitortable не имеет столбца с именем contactperson


package com.example.vistiorg;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


public class VisitorDatabase extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 2;
    private static final String DATABASE_NAME = "visitordb";
    private static final String DATABASE_TABLE = "visitortable";

    //Column names for database
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_PHONE = "phone";
    private static final String KEY_CONTACTPERSON = "contactperson";
    private static final String KEY_APTNO = "aptno";
    private static final String KEY_PURPOSE = "purpose";
    private static final String KEY_DATE = "date";
    private static final String KEY_TIME = "time";
    private Visitor visitor;


    VisitorDatabase(Context context) {
        super(context, DATABASE_NAME,null, DATABASE_VERSION);

    }



    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //CREATE TABLE nametame(id INT PRIMARY KEY, name TEXT, phone INT, contactperson TEXT, aptno INT, purpose TEXT,date TEXT, time TEXT);
        String query= "CREATE TABLE "+DATABASE_TABLE+"("+
                       KEY_ID+" INT PRIMARY KEY,"+
                       KEY_NAME+" TEXT,"+
                       KEY_PHONE+" TEXT,"+
                       KEY_CONTACTPERSON+" TEXT,"+
                       KEY_APTNO+" TEXT,"+
                       KEY_PURPOSE+" TEXT,"+
                       KEY_DATE+" TEXT,"+
                       KEY_TIME+" TEXT"+")";

        sqLiteDatabase.execSQL(query);

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        if(i >= i1)
            return;
        sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS " +DATABASE_TABLE);
        onCreate(sqLiteDatabase);

    }

    public long addVisitor(Visitor visitor) {

        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues c= new ContentValues();

        c.put(KEY_NAME, visitor.getName());
        c.put(KEY_PHONE, visitor.getPhone());
        c.put(KEY_CONTACTPERSON, visitor.getContactperson());
        c.put(KEY_APTNO, visitor.getAptno());
        c.put(KEY_PURPOSE, visitor.getPurpose());
        c.put(KEY_DATE,visitor.getDate());
        c.put(KEY_TIME, visitor.getTime());

        //inserting data into db
        long ID= db.insert(DATABASE_TABLE, null,c);
        Log.d("Inserted", "ID ->"+ ID);
        return ID;


    }
}


Что я уже пробовал:

Я попытался очистить данные приложения, удалить его. У меня это не сработало. Пожалуйста помочь.

Richard MacCutchan

Сообщение говорит вам, что все ваши значения посетителя равны нулю.

David Crow

Я не могу улучшить ответ Ричарда, но я хотел бы добавить, что я думаю _id это обязательный столбец. Просто для усмешек, вы могли бы попробовать увеличить DATABASE_VERSION.

1 Ответов

Рейтинг:
0

Garth J Lancaster

Я не могу выбрать ничего очевидного, если только приложение все еще не находит копию базы данных, оставленную на устройстве/рабочем пространстве

Одна вещь, которую я бы сказал, это то, что (голос Голума) "мы ненавидим SQL, написанный таким образом" - он настолько подвержен ошибкам, и из большого личного опыта работы с SQLite (не Android) он иногда делает забавные вещи с именами столбцов и интервалами... обычно мы/я бы предложили параметризованные запросы и т. д., Я не знаю, можете ли вы в своем фреймворке Android - вы можете немного привести в порядок оператор, используя эту технику https://shyr.io/blog/android-create-tables-in-sqlite-beautifully[^] что также сделало бы его менее подверженным ошибкам (т. е. используйте конструктор для построения SQL