我是android新手,我想用SQLite创建一种CRUD。
我有一个public class DataBaseHelper
,它有一个构造函数:
public DataBaseHelper(Context context)
{
this.context = context;
}
和datebase的getter:
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;
}
如果我是第一次启动程序 - 一切似乎都没问题。数据库为null,我创建它(使用表)。但是,当我重新启动应用程序时,数据库再次为null,并且无法创建表。
我决定编写一个checkDB函数,它试图打开一个数据库。但是我在哪里可以找到它的路径?我不希望它被“硬编码”。
或者我可能正在做某种反模式?
答案 0 :(得分:60)
您可以按context.getDatabasePath(DataBaseHelper.dbName)
答案 1 :(得分:3)
您可以在帮助程序的构造函数中使用getDatabasePath方法:
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();
}
答案 2 :(得分:1)
这里我正在写两种方法来获得这条路。
(1)使用自定义方法
public String getDbPath(Context context,String YourDbName)
{
return context.getDatabasePath(YourDbName).getAbsolutePath();
}
(2)使用文件类
File path=context.getDatabasePath("YourDbName");
String db_path=path.getAbsolutePath();
Log.i("Path:",db_path);
即使你会看到这两个代码...然后两个代码是相同的, 第一个是获取数据库路径的快捷方法,它占用较少的内存与第二个选项相比。
答案 3 :(得分:0)
我还需要为应用程序访问dbs。这对我有用:
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);
}
希望它有所帮助! : - )