The method openOrCreateDatabase (String, int, null) is undefined for the type DatabaseData

0

I'm having trouble creating a class that created and manipulated the database! But in criar() method gave a problem saying that

  

"The method openOrCreateDatabase (String, int, null) is undefined for   the type DatabaseData ".

Does anyone have any suggestions for getting around such a problem ?! My code goes below:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

public class BancoDeDados {
     private SQLiteDatabase db;
     private String DATABASE_NAME;
     private String TABLE_NAME;
     private String SQL_SELECT_ALL;
     private String SQL_SELECT_ID;
     private String SQL_CREATE;

     public BancoDeDados(SQLiteDatabase db,String DATABASE_NAME,String TABLE_NAME,String SQL_SELECT_ALL,String SQL_SELECT_ID,String SQL_CREATE){
         this.db = db;
         this.DATABASE_NAME = DATABASE_NAME;
         this.TABLE_NAME = TABLE_NAME;
         this.SQL_SELECT_ALL = SQL_SELECT_ALL;
         this.SQL_SELECT_ID = SQL_SELECT_ID;
         this.SQL_CREATE = SQL_CREATE;
     }

     public void criar(){
         this.db = openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
         this.db.execSQL(this.SQL_CREATE);
         this.db.close(); 
     }
}
    
asked by anonymous 03.03.2014 / 19:01

2 answers

2

There are two errors.

The first is that you are trying to call a method that does not exist in the BancoDeDados class. This is because BancoDeDados must be a subclass of SQLiteDatabase , or else contain an instance (object) of type SQLiteDatabase , such as the db object, so that you can call any of the openOrCreateDatabase() methods available in that class (check out the SQLiteDatabase documentation that are three ways to call this method). There are two ways to resolve this error: declare public class BancoDeDados extends SQLiteDatabase or call db.openOrCreateDatabase(...) instead of openOrCreateDatabase(...) .

The second error is that even if you can call the openOrCreateDatabase() method, the signature of this method is incorrect, that is, the parameters passed to it do not match the types accepted by the method. You are calling the method with types String , int and null , and accepted parameters are of other types.

One of the acceptable signatures receives String , SQLiteDatabase.CursorFactory and DatabaseErrorHandler . So if you pass the parameters (String, null, null) it might work. But do not forget to solve the first mistake before that.

    
03.03.2014 / 23:18
1

The main reason for creating this class to create and manipulate a database is to reuse it and in addition this class did NOT need EXTENDS any other!

Below My Class after the problem has been resolved.
BancoDeDados.java

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

 public class BancoDeDados {
 private String DATABASE_NAME;
 private int DATABASE_VERSION;
 private String TABLE_NAME;
 private String SQL_SELECT_ALL;
 private String SQL_SELECT_ID;
 private String SQL_CREATE;

 public BancoDeDados(String DATABASE_NAME,int DATABASE_VERSION,String TABLE_NAME,String SQL_SELECT_ALL,String SQL_SELECT_ID,String SQL_CREATE){
     this.DATABASE_NAME = DATABASE_NAME;
     this.DATABASE_VERSION = DATABASE_VERSION;
     this.TABLE_NAME = TABLE_NAME;
     this.SQL_SELECT_ALL = SQL_SELECT_ALL;
     this.SQL_SELECT_ID = SQL_SELECT_ID;
     this.SQL_CREATE = SQL_CREATE;
 }
 public BancoDeDados(String DATABASE_NAME,int DATABASE_VERSION,String TABLE_NAME,String SQL_SELECT_ALL,String SQL_CREATE){
     this.DATABASE_NAME = DATABASE_NAME;
     this.DATABASE_VERSION = DATABASE_VERSION;
     this.TABLE_NAME = TABLE_NAME;
     this.SQL_SELECT_ALL = SQL_SELECT_ALL;
     this.SQL_CREATE = SQL_CREATE;
 }

public void onCreate(Context ctx,SQLiteDatabase db){
     //openOrCreateDatabase --> Cria ou Abre banco de dados
     //(nome.db,permissão (modo), ...)
     // MODE_PRIVATE --> Priva o acesso do banco para somente aplicação
     db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE, null);
     db.execSQL(this.SQL_CREATE); //Criando tabela caso não exista!!
     db.close();
 }

public void onUpgrade(Context ctx,SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + this.TABLE_NAME);

    // Create tables again
    onCreate(ctx,db);
 }

 public long onWrite(Context ctx,SQLiteDatabase db,String row,ContentValues ctv){
     db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
     long lg = db.insert(this.TABLE_NAME,row,ctv);
     db.close();
     return lg;
 }

 public int onUpdate(Context ctx,SQLiteDatabase db,ContentValues ctv,String row,int id){
     db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
     int x = db.update(this.TABLE_NAME, ctv, row, new String[]{String.valueOf(id)});
     db.close();
     return x;
 }

 public Cursor onSelecAll(Context ctx,SQLiteDatabase db){
     db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
     Cursor cursor = db.rawQuery(this.SQL_SELECT_ALL, null);
     return cursor;
 }

 public Cursor onSelecId(Context ctx,SQLiteDatabase db,int id){
     db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
     Cursor cursor = db.rawQuery(SQL_SELECT_ID, new String[]{String.valueOf(id)});
     return cursor;
 }

 public int onDelete(Context ctx,SQLiteDatabase db,String row,int id){
     db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
     int x = db.delete(this.TABLE_NAME, row, new String[]{String.valueOf(id)});
     db.close();
     return x;
 }

 public void onClose(Context ctx,SQLiteDatabase db){
     db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
     db.close();
 }

}

And in Main.java we have:

     import android...
     public class Main extends Activity {

 private SQLiteDatabase db;
 private Context ctx;
 private static final int DATABASE_VERSION = 1;
 private static final String DATABASE_NAME = "bancodedado.db";
 private static final String TABLE_NAME = "tabela";
 private static final String SQL_SELECT_ALL = "SELECT * FROM "+TABLE_NAME;
 private static final String SQL_SELECT_ID = "SELECT * FROM tabela WHERE _id = ?";
 /* SQL de criação do banco de dados. */
 private static final String SQL_CREATE = "CREATE TABLE IF NOT EXISTS tabela(" +
                    "_id INTEGER PRIMARY KEY, " +
                    "pessoa VARCHAR(30), " 
                    "animal VARCHAR(30))";
 BancoDeDados BD = new BancoDeDados(DATABASE_NAME,DATABASE_VERSION,TABLE_NAME,SQL_SELECT_ALL,SQL_SELECT_ID,SQL_CREATE);
  @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);  
    ctx = getBaseContext(); //Context para usar na classe BancoDeDados
    BD.onCreate(ctx, db); // Criar BD e tabela caso sejam necessários!! 
   /* .... */
 }
}
    
04.03.2014 / 17:57