通常当我想查看SQLite数据库的内容时,我使用sqlite3可执行文件并给它命令如下:
.open MYDATABASE.db
SELECT * FROM myUserTable;
然后通过命令行输出我的表格,很容易看到我数据库中任何内容的内容。
不幸的是,我正在使用的SQLite数据库甚至没有关联的.db文件。它从一个名为SQLiteOpenHelper的类扩展而来。该类驻留在一个名为DBHandler.java的文件中,但显然尝试执行命令行语句(即我习惯)在这种情况下失败。
有谁知道如何调试从SQLiteOpenHelper扩展的SQLite数据库?
答案 0 :(得分:1)
您可以使用cursor
查看 sqliteDb 的内容:
public Cursor selectRecords() {
String[] cols = new String[] {USER_ID, USER_NAME};
Cursor mCursor = database.query(true, USER_TABLE,cols,null
, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor; // iterate to get each value.
}
答案 1 :(得分:1)
您可以使用以下代码在设备的可访问文件夹中提取数据库:
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath = "/data/" + getPackageName() + "/databases/yourdatabasename";
String backupDBPath = "backupname.db";
File currentDB = new File(currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
} catch (Exception e) {
}
然后使用您喜欢的工具打开您的file.db。
编辑:您需要在清单文件中添加在设备上写入的权限。
答案 2 :(得分:1)
数据库必须存在。要查找其名称,请参阅DBHandler
(如果extends SQLiteOpenHelper
)将有一个类似于此的构造函数:
public DBHandler(Context context) {
super(context, your_database_name, null, your_database_version);
...
}
数据库名称可以是任意的(有或没有任何扩展名),你可以在/data/data/<your_package_name>/databases/<your_database_name>
找到它
Here您会找到一些关于访问此文件的建议。
警告:在模拟设备中授予内部文件访问权限,但必须以实际设备为根。您可以在应用程序中创建一个实用程序方法(仅在调试模式下),以自动执行复制过程,如此处的另一个答案中所述。
希望它有所帮助!
答案 3 :(得分:1)
您可以使用intellij idea和数据库插件
数据库插件可以连接到你设备的数据库,调试非常酷))