Проблема вставки данных в SQLite с использованием long Всегда возвращает -1 - PullRequest
2 голосов
/ 28 марта 2019

У меня проблемы с поиском того, чего не хватает в моем коде.Я пытаюсь вставить данные, но " long result == db.insert " в моем классе DatabaseHelper всегда возвращает -1 ". Я не могу точно указать, что я делаю неправильно. Пожалуйста, помогите. Любая идеяочень благодарны.

Мой класс DatabaseHelper:

public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "drivefinal.db";
public static final String TABLE_NAME = "drive_table";
public static final String ID = "ID";
public static final String NUMBER = "Number";
public static final String FNAME = "First Name";
public static final String LNAME = "Last Name";
public static final String COORDINATE = "Coordinate";
public static final String ADDRESS = "Address";
public static final String NOTES = "Notes";

public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table if not exists " + TABLE_NAME +"(ID INTEGER PRIMARY KEY AUTOINCREMENT ,NUMBER TEXT,FNAME TEXT,LNAME TEXT,COORDINATE TEXT,ADDRESS TEXT,NOTES TEXT)");
}

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

public boolean insertData(String number, String fName, String lName, String coordinate, String address, String notes){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(NUMBER, number);
    contentValues.put(FNAME, fName);
    contentValues.put(LNAME, lName);
    contentValues.put(COORDINATE, coordinate);
    contentValues.put(ADDRESS, address);
    contentValues.put(NOTES, notes);

    long result = db.insert(TABLE_NAME,null ,contentValues);
        if(result == -1 )
            return false;
        else
            return true;
}

Мой основной файл активности:

public void addData(){
    btnSave.setOnClickListener(
        new View.OnClickListener(){
            @Override
            public void onClick(View v){
                boolean isInserted = myDb.insertData(editTextnumber.getText().toString(),
                        editTextfname.getText().toString(),
                        editTextlname.getText().toString(),
                        editTextcoordinate.getText().toString(),
                        editTextaddress.getText().toString(),
                        editTextnotes.getText().toString());

                        if(isInserted)
                            Toast.makeText(MainActivity.this, "Data Inserted", Toast.LENGTH_SHORT).show();
                        else
                            Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();
            }
        }

        );
}

}

1 Ответ

1 голос
/ 28 марта 2019

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

например. Ваша таблица будет иметь имя столбца FNAME , а не Имя (и т. д.).

Во-вторых, у вас могут возникнуть проблемы при попытке использовать столбец с именем Имя , так как он содержит пробел и должен быть заключен, например. [Имя] .

Я бы предложил использовать: -

public static final String NUMBER = "Number";
public static final String FNAME = "FirstName"; //<<<<<<<<<< space removed
public static final String LNAME = "LastName"; //<<<<<<<<<< space removed
public static final String COORDINATE = "Coordinate";
public static final String ADDRESS = "Address";
public static final String NOTES = "Notes";

Вместе с: -

db.execSQL("create table if not exists " + TABLE_NAME +"(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT ," + NUMBER + " TEXT," + FNAME + " TEXT," + LNAME + " TEXT," + COORDINATE + " TEXT," + ADDRESS + " TEXT," + NOTES + " TEXT)");

Чтобы внести изменения (т. Е. Для запуска метода onCreate, так как он запускается только автоматически при создании базы данных), вам необходимо выполнить одно из следующих действий: -

  • Удалить данные приложения.
  • Удалите приложение.
  • Изменить номер версии базы данных, например изменить super(context, DATABASE_NAME, null, 1); на super(context, DATABASE_NAME, null, 2);

, а затем снова запустите приложение.

...