Je suis nouveau sur Android et je veux créer un type de CRUD avec SQLite.
J'ai un public class DataBaseHelper
qui a un constructeur:
public DataBaseHelper(Context context)
{
this.context = context;
}
et un getter pour la base de données:
public SQLiteDatabase getDataBase() {
if (dataBase == null) {
try {
dataBase = context.openOrCreateDatabase(DataBaseHelper.dbName,
Context.MODE_PRIVATE, null);
dataBase.execSQL("CREATE TABLE " + DataBaseHelper.accountTblName + " " +
"(ID integer PRIMARY KEY AUTOINCREMENT" +
",name TEXT" +
",address TEXT" +
",password TEXT)");
}
catch(Exception e) {
Log.e(context.toString(), e.getMessage());
if (dataBase != null) {
dataBase.close();
}
}
}
return dataBase;
}
Si je lance un programme pour la première fois, tout semble aller pour le mieux. la base de données est nulle et je la crée (avec une table). Mais lorsque je redémarre, ma base de données d'applications est à nouveau nulle et la table ne peut pas être créée.
J'ai décidé d'écrire une fonction checkDB, qui tente d'ouvrir une base de données. Mais où puis-je trouver un chemin pour cela? Je ne veux pas qu'il soit "codé en dur".
Ou peut-être que je fais une sorte d'anti-pattern?
Vous pouvez obtenir le chemin par context.getDatabasePath(DataBaseHelper.dbName)
Vous pouvez utiliser la méthode getDatabasePath dans le constructeur de votre assistant:
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "wl.db";
private static final int DATABASE_VERSION = 1;
public String databasePath = "";
public MyDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
databasePath = context.getDatabasePath("wl.db").getPath();
}
je suis en train d’écrire de deux manières différentes pour obtenir le chemin.
(1) using custom method
public String getDbPath(Context context,String YourDbName)
{
return context.getDatabasePath(YourDbName).getAbsolutePath();
}
(2) using File class
File path=context.getDatabasePath("YourDbName");
String db_path=path.getAbsolutePath();
Log.i("Path:",db_path);
même si vous verrez les deux codes ... alors les deux codes sont identiques, La première méthode est la méthode de raccourci pour obtenir le chemin de la base de données, et occupe la moins de mémoire par rapport à la deuxième option.
J'avais besoin d'accéder à dbs pour l'application aussi. Cela a fonctionné pour moi:
String dbFile;
String[] dbNames = getSherlockActivity().databaseList(); // or ContextWrapper
for (int i = 0; i < dbNames.length; i++) {
dbFile = getSherlockActivity().getDatabasePath(dbNames[i]).toString();
Log.i(LOG_TAG, dbFile);
}
J'espère que ça aide! :-)