The main reason for creating this class for creating and manipulating databases is reuse it and what’s more this class didn’t need to extend any other!
Below My Class after solving the problem.
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 the 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!!
/* .... */
}
}
You didn’t mean to say
this.db.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
?– bfavaretto
@bfavaretto No, but also tried that way and not to solve my problem! I found the solution using
Context
– carlosgoes2008