2012-03-21 19 views
19

Sono nuovo ad Android e voglio creare una sorta di CRUD con SQLite.Ottieni percorso database

Ho un public class DataBaseHelper, che dispone di un costruttore:

public DataBaseHelper(Context context) 
{ 
    this.context = context; 
} 

e un getter per datebase:

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; 
} 

Se inizio di un programma per la prima volta - tutto sembra essere a posto. il database è nullo e io lo creo (con una tabella). Ma quando riavvio il database dell'app è nuovamente nullo e la tabella non può essere creata.

Ho deciso di scrivere una funzione checkDB, che tenta di aprire un database. Ma dove posso trovare un percorso? Non voglio che sia "hardcoded".

O forse sto facendo una specie di anti-pattern?

risposta

56

È possibile ottenere il percorso da context.getDatabasePath(DataBaseHelper.dbName)

+1

Dà un percorso String ?? Sono venuto a sapere che restituisce File. Come ottenere una stringa? –

+4

@ Archie.bpgc 'context.getDatabasePath (DataBaseHelper.dbName) .toString;' – jmhend

+0

ok. Grazie mille –

0

avevo bisogno di accedere DBS per l'applicazione anche. Questo ha funzionato per me:

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); 
} 

Spero che sia d'aiuto! :-)

1

per ottenere il percorso di Sqlite banca dati

qui sto scrivendo due modi per ottenere il percorso.

(1) con il metodo personalizzato

public String getDbPath(Context context,String YourDbName) 
{ 
    return context.getDatabasePath(YourDbName).getAbsolutePath(); 
} 

(2) utilizzando classe File

File path=context.getDatabasePath("YourDbName"); 
    String db_path=path.getAbsolutePath(); 
    Log.i("Path:",db_path); 

anche si vedrà il codice di entrambi ... allora sia il codice è lo stesso, 1o è il metodo di scelta rapida per ottenere il percorso del database e occupa la quantità di memoria in meno di memoria rispetto alla seconda opzione.

2

È possibile utilizzare il metodo getDatabasePath all'interno del costruttore del aiutante:

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(); 
    }