如何从SQLite Openhelper调试SQLite数据库?

时间:2015-03-05 22:36:42

标签: android sqlite fts3

通常当我想查看SQLite数据库的内容时,我使用sqlite3可执行文件并给它命令如下:

.open MYDATABASE.db
SELECT * FROM myUserTable;

然后通过命令行输出我的表格,很容易看到我数据库中任何内容的内容。

不幸的是,我正在使用的SQLite数据库甚至没有关联的.db文件。它从一个名为SQLiteOpenHelper的类扩展而来。该类驻留在一个名为DBHandler.java的文件中,但显然尝试执行命令行语句(即我习惯)在这种情况下失败。

有谁知道如何调试从SQLiteOpenHelper扩展的SQLite数据库?

4 个答案:

答案 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和数据库插件
数据库插件可以连接到你设备的数据库,调试非常酷))