NullPointerException cuando inserto en la base de datos (android)

tengo algunos datos para escribir en la base de datos (tres cadenas); tengo un clase privada DBHelper extiende SQLiteOpenHelper y yo tengo base de datos = dbHelper.getWritableDatabase(); Cuando hago dataBase.insert() tengo una excepción nullPointerException.

Revisé mis datos en el depurador para escribir y no son iguales a nulos;

Ayudante de DB:

private class DBHelper extends SQLiteOpenHelper { //for write and read data from DB

static final String GROUPPS = "groupps";
static final String IMPORTANCE = "importance";
static final String NAME_OF_TABLE = "Person";
static final String PERSON_KEY = "perskey";

    private static final String MY_QUERY = "CREATE TABLE " + NAME_OF_TABLE + " ( " +
            PERSON_KEY + " TEXT, " +
            GROUPPPS + " TEXT, " +
            IMPORTANCE + " TEXT);";

    public DBHelper(Context context) {
        // constructor of superclass
        super(context, "MyDBB", null, 2);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d("", "--- onCreate database ---");
        db.execSQL(MY_QUERY);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

mi método para escribir datos en la base de datos:

 public void writeDataToDB(ArrayList<Person> arrayList) {

    contentValues = new ContentValues();
    dbHelper = new DBHelper(activity.getApplicationContext());
    dataBase = dbHelper.getWritableDatabase();


    for (int i = 0; i < arrayList.size(); i++) {

        contentValues.put(PERSON_KEY, arrayList.get(i).getKey());
        contentValues.put(GROUPPPS, arrayList.get(i).getGroup());
        contentValues.put(IMPORTANCE, String.valueOf(arrayList.get(i).isImportant()));

        Log.e("writeDataToDB", "Start inserting " + contentValues.toString());
        long rowID = dataBase.insert(NAME_OF_TABLE, null, contentValues);
        Log.e("writeDataToDB - ", "Value inserted, rowID = " + rowID);
        contentValues.clear();
    }

}

Y en mi método tengo una excepción en la línea: long rowID = dataBase.insert(NAME_OF_TABLE, null, contentValues);
y rowID = -1 significa - algo mal;

y mi LogCat:

Error inserting groupp=Withoutgroup importance=false perskey=0r2-2B43414D272B4D16
    android.database.sqlite.SQLiteException: table Persons has no column named groupp: , while compiling: INSERT INTO Persons(groupp,importance,perskey) VALUES (?,?,?)

preguntado el 03 de mayo de 12 a las 11:05

2 Respuestas

Grupo procesos es una palabra clave, por lo que si su tabla tiene esto como nombre de columna, entonces eso puede ser un problema. ver

group=Without group

contestado el 03 de mayo de 12 a las 12:05

Cambié el nombre de todos los GRUPOS a GRUPOS (Para prueba); y ahora tengo otro problema (cambié LogCat en mi publicación). Pero mi consulta tiene esta columna... - Vetalll

Resolví mi problema. El problema es una palabra clave reservada "grupo en SQLite". Luego tuve la base de datos anterior en mi emulador... gracias por su ayuda. - Vetalll

comprobar la diferencia. between >>>>static final String GROUPPS = "groupps"; y la tabla Persons no tiene una columna llamada groupp:>>>>note las 's' - No esta en blanco

"importancia=grupo falso=Sin grupo perskey=0r114343434343434343434343434343434343434343434343"

Tienes que poner Sin grupo entre comillas simples, así: 'Without group', o SQLite pensará que la segunda palabra es parte de la consulta SQL.

contestado el 03 de mayo de 12 a las 11:05

Intente poner todo el texto que inserte en la base de datos entre comillas. Una hipótesis alternativa sería que a SQLite simplemente no le gusta mucho usar palabras clave de SQL como nombres de columna (como grupo). - jcxavier

Resolví mi problema. El problema es una palabra clave reservada "grupo en SQLite". Luego tuve la base de datos anterior en mi emulador... gracias por su ayuda. - Vetalll

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.