在没有Root的实际设备上读取/访问SQLite数据库(Eclipse)

时间:2014-08-26 03:17:04

标签: android android-sqlite

我一直在研究我的项目,我目前正在使用模拟器来访问我创建的数据库。但是,我想知道是否有人知道在DDMS eclipse中访问真实设备上的DB的方法?

我知道在模拟器上访问数据库只是打开data / data / package_name / database ...我无法真正找到一种方法来检查我的真实设备上的数据库。 (这是Android设备中的一些安全问题)我想使用它的原因有时候,模拟器不支持GPS信号。有谁知道我可以下载任何第三方lib /插件吗?非常感谢你。

1 个答案:

答案 0 :(得分:1)

我认为这对你有用 **我是SdCard中的复制数据库,然后访问**。

这是我的数据库助手类

public class OpenDatabaseHelper extends SQLiteOpenHelper {

static final String DATABASE_NAME = "MyDB";
.
.
.
public OpenDatabaseHelper(Context context) {
        // super(context, name, factory, version);
        super(context, Environment.getExternalStorageDirectory()
                + File.separator + "/DataBase/" + File.separator
                + DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }
.
.
.
}

在Activity类中创建对象

OpenDatabaseHelper db = new OpenDatabaseHelper(YourActivity.this);

调用任何数据库方法

db.DataBasemethod();

然后输入此代码

try {
            String destPath = Environment.getExternalStorageDirectory().toString();
            File f = new File(destPath);
            if (!f.exists()) {
                f.mkdirs();
                f.createNewFile();
                // ---copy the db from the /data/data/ folder into
                // the sdcard databases folder--- here MyDB is database name
                CopyDB(new FileInputStream("/data/data/" + getPackageName()+ "/databases"), new FileOutputStream(destPath+ "/MyDB"));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();

        }

public void CopyDB(InputStream inputStream, OutputStream outputStream)
            throws IOException {
        // ---copy 1K bytes at a time---
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, length);
        }
        inputStream.close();
        outputStream.close();
    }