2012-03-21 61 views
19

Im mới cho android và tôi muốn tạo loại CRUD với SQLite.Nhận đường dẫn cơ sở dữ liệu

Tôi có một public class DataBaseHelper trong đó có một nhà xây dựng:

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

và một getter cho 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; 
} 

Nếu tôi bắt đầu một chương trình lần đầu tiên - tất cả mọi thứ có vẻ là ổn. cơ sở dữ liệu là null và tôi tạo nó (với một bảng). Nhưng khi tôi khởi động lại cơ sở dữ liệu ứng dụng của tôi là null một lần nữa và bảng không thể được tạo ra.

Tôi đã quyết định viết chức năng checkDB, cố gắng mở cơ sở dữ liệu. Nhưng tôi có thể lấy con đường cho nó ở đâu? Tôi không muốn nó được "hardcoded".

Hoặc có thể tôi đang thực hiện một số loại chống mẫu?

Trả lời

56

Bạn có thể nhận được con đường bằng context.getDatabasePath(DataBaseHelper.dbName)

+1

Liệu nó cung cấp cho một con đường Chuỗi ?? Tôi đã biết nó trả về File. Làm thế nào để có được một String? –

+4

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

+0

được. Cảm ơn rất nhiều –

0

tôi cần phải truy cập vào dbs cho các ứng dụng cũng có. Điều này phù hợp với tôi:

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

Hy vọng điều đó sẽ hữu ích! :-)

1

Để nhận đường dẫn của cơ sở dữ liệu Sqlite

tại đây tôi đang viết hai cách để có được đường dẫn.

(1) sử dụng phương pháp tùy chỉnh

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

(2) sử dụng tập tin lớp

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

thậm chí bạn sẽ thấy cả hai mã ... sau đó cả hai đang cùng, Đầu tiên là phương pháp tắt để có được đường dẫn cơ sở dữ liệu và nó chiếm ít hơn bộ nhớ so với tùy chọn thứ hai.

2

Bạn có thể sử dụng phương pháp getDatabasePath bên trong constructor của helper của bạn:

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(); 
    } 
Các vấn đề liên quan