我创建了基于文章here创建SQLite数据库的代码。
最相关的代码是:
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "Platypus.db";
private static final String TABLE_VENDORS = "vendors";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_VENDORID = "vendorId";
public static final String COLUMN_COMPANYNAME = "companyName";
public SQLiteHandlerVendors(Context context, String vendor,
SQLiteDatabase.CursorFactory factory, int company) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_VENDORS_TABLE = "CREATE TABLE " +
TABLE_VENDORS + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_VENDORID
+ " TEXT," + COLUMN_COMPANYNAME + " TEXT" + ")";
db.execSQL(CREATE_VENDORS_TABLE);
}
public void addVendor(Vendor vendor) {
ContentValues values = new ContentValues();
values.put(COLUMN_VENDORID, vendor.getVendorId());
values.put(COLUMN_COMPANYNAME, vendor.getCompanyName());
SQLiteDatabase db = this.getWritableDatabase();
db.insert(TABLE_VENDORS, null, values);
db.close();
}
然而,尽管数据的插入似乎有效 - 但addVendor()
的调用在没有任何异常的情况下运行时使用以下代码:
protected void onPostExecute(String result) {
try {
JSONArray jsonArr = new JSONArray(result);
for (int i = 0; i < jsonArr.length(); i++) {
JSONObject jsonObj = jsonArr.getJSONObject(i);
String vendorId = jsonObj.getString("vendorId");
String companyName = jsonObj.getString("companyName");
Log.i("vendorId", vendorId);
Log.i("companyName", companyName);
// Prepare for writing to db
Vendor vend = new Vendor();
vend.setVendorId(vendorId);
vend.setCompanyName(companyName);
SQLiteHandlerVendors sqliteHandler = new SQLiteHandlerVendors(MainActivity.this, null, null, 1);
sqliteHandler.addVendor(vend);
}
} catch (JSONException j) {
System.out.println(j.getMessage());
Log.i("jsonEx", j.getMessage());
}
Log.i("GetVendorsTask.FromOnPostExecute", result);
}
我找不到应该创建的 Platypus.db 文件。
This article说,“如果你的应用程序创建了一个数据库,那么这个数据库默认保存在目录DATA / data / APP_NAME / databases / FILENAME 中。”
在我的硬盘上全局搜索“Platypus.DB”没有任何结果。创建的数据库是不是持久存在,还是有其他原因导致我找不到它?
我尝试通过添加此代码找到它:
Log.i("Data Dir", Environment.getDataDirectory().toString());
......当LogCat给我的时候是:
04-07 12:36:47.133 1089-1089/platypus.app I/Data Dir﹕ /data
C:\ Users \ clay \ AndroidStudioProjects \ Platypus 中没有“data”文件夹,我的硬盘根目录中也没有(* C:*)。
数据目录/文件是否只能在某个虚拟空间,模拟器的文件系统中查看?如果是这样,我如何实际访问模拟器的文件系统以查看此数据?
好的,我打开了这个视图,并导航到数据/数据/ hhs(应用程序的名称真的是“hhs”而非“platypus”):
...但仍然没有看到HHS.DB(我看不到所有的“数据库”文件夹)......
如果我选中“&lt; =”按钮(“从设备中提取文件”)并突出显示大小为16384的文件, 将打开“获取设备文件”对话框文件名为“HHS.DB”(正如我希望找到的那样)。
但是,为什么它的路径是“data \ data \ hhs \ unnamed folder \ unnamed file”而不是“data \ data \ hhs \ databases \ HHS.DB”?
另一个文件(大小8720)是HHS.db-journal
将这些文件保存到我的硬盘并下载SQLite Data Browser后,我能够验证记录是否实际写入表中:
SQLite数据浏览器是满足这种需求的绝佳工具!
我不知道改变了什么/它如何改变,但它现在正在按原样运作:
答案 0 :(得分:2)
中没有“data”文件夹 C:\ Users \ clay \ AndroidStudioProjects \ Platypus,也没有 我的硬盘根目录( C:)。
是的,这是核心。
数据目录/文件是否只能在文件中的某个虚拟空间中查看 仿真器的系统还是这样?如果是这样,我怎么才能真正访问 模拟器的文件系统来查看这些数据?
使用Eclipse,您可以从模拟器中提取数据库
转到windows打开透视图。转到DDMS
然后转到文件资源管理器 - &gt; data-&gt; data-&gt;查看您的包名 - &gt;数据库 - &GT; Platypus.DB“
/data/data/[packagename]/databases/
您选择数据库并且有一个选项来提取数据库,然后您可以使用sqlite浏览器来查看数据