2017-12-22 7 views
-3

virtuelle Methode 'Leere android.database.sqlite.SQLiteDatabase.execSQL (java.lang.String)' aufzurufen:Android: Ich erhalte diese Fehlerversuch auf ein Null-Objekt Referenz

Unable to start activity ComponentInfo{amsi.dei.estg.ipleiria.pt.ima/amsi.dei.estg.ipleiria.pt.ima.ListaEmpresas}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.database.sqlite.SQLiteDatabase.execSQL(java.lang.String)' on a null object reference" on this line in my DBHelper:

Der Fehler in dieser Zeile ist:

database.execSQL(createEmpresasTable); 

Mein DBHelper:

public class ImaBDHelper extends SQLiteOpenHelper { 

private static final String DB_NAME = "IMA"; 
private static final int DB_VERSION = 1; 

private static final String EMPRESAS_TABLE_NAME = "empresas"; 
private static final String NOME_EMPRESA = "nome"; 
private static final String DESCRICAO_EMPRESA = "descricao"; 
private static final String LOCALIDADE_EMPRESA = "localidade"; 
private static final String AREA_EMPRESA = "area"; 

private final SQLiteDatabase database; 

public ImaBDHelper(Context context) 
{ 
    super(context, DB_NAME, null, DB_VERSION); 

    this.database = getWritableDatabase(); 
} 


@Override 
public void onCreate(SQLiteDatabase db) { 
    String createEmpresasTable = "CREATE TABLE " + EMPRESAS_TABLE_NAME + 
      "(id INTENGER PRIMARY KEY AUTOINCREMENT," + 
      NOME_EMPRESA + " TEXT NOT NULL," + 
      DESCRICAO_EMPRESA + " TEXT," + 
      LOCALIDADE_EMPRESA + " TEXT NOT NULL," + 
      AREA_EMPRESA + " TEXT NOT NULL," + ")"; 
database.execSQL(createEmpresasTable); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    String sql = "DROP TABLE IF EXISTS " + EMPRESAS_TABLE_NAME; 
    database.execSQL(sql); 
    this.onCreate(database); 
} 

Die rest sind nur Methoden zum Erstellen, Lesen, Aktualisieren und Löschen.

Es tut uns leid, wenn dies ein Duplikat ist, aber ich habe nicht die Antwort für dieses genaue Problem in meinen Suchen gefunden. Vielen Dank im Voraus!

+1

Verwenden Sie das 'db' Objekt aus der Signatur von' onCreate (SQLiteDatabase db) ', nicht die eine' Datenbank', die Sie als Feld definiert haben. Dasselbe gilt für die Implementierung der onUpgrade() Methode ... –

+0

Danke !! Ich weiß nicht, wie ich es nicht bemerkt habe –

Antwort

1

Verwendung onCreate(SQLiteDatabase db) Signaturwert anstelle von private final SQLiteDatabase database; für Abfrage wie ausführen unten

@Override 
public void onCreate(SQLiteDatabase db) { 
    String createEmpresasTable = "CREATE TABLE " + EMPRESAS_TABLE_NAME + 
      "(id INTENGER PRIMARY KEY AUTOINCREMENT," + 
      NOME_EMPRESA + " TEXT NOT NULL," + 
      DESCRICAO_EMPRESA + " TEXT," + 
      LOCALIDADE_EMPRESA + " TEXT NOT NULL," + 
      AREA_EMPRESA + " TEXT NOT NULL," + ")"; 
db.execSQL(createEmpresasTable);// change here 
} 

wie dies auch in Ihrem ONUPGRADE() verwenden

Verwandte Themen