2011-02-08 35 views
17

Tôi đang làm việc trên một số mã SQLite và muốn kiểm tra cơ sở dữ liệu. Nếu tôi chạy mã trên trình mô phỏng, tôi có thể lấy tệp từ cơ sở dữ liệu \ data \ myProject \ bằng cách sử dụng trình quản lý tệp DDMS nhưng nếu tôi chạy nó trên phần cứng thực tế thì thư mục data \ data không thể truy cập được. Có cách nào khác ngoài việc truy cập root vào điện thoại không?Trình khám phá tệp DDMS không thể truy cập dữ liệu dữ liệu (HTC Desire HD)

+1

Bạn phải root điện thoại của bạn cho điều đó. –

+0

Bạn phải là người chủ để làm điều đó bằng cách duyệt, nhưng chương trình có thể thay đổi sự cho phép của tập tin làm cho nó có thể truy cập thông qua tên đường dẫn đầy đủ của nó. –

Trả lời

19

Cơ sở dữ liệu SQLIte thực sự chỉ là một tệp được lưu trữ trong bộ nhớ điện thoại, mà bạn có thể sao chép vào thẻ SD của điện thoại và sau đó dễ dàng truy cập nó từ máy tính của bạn. Dưới đây là chức năng thực hiện chính xác những gì bạn cần. Chỉ cần đảm bảo thay đổi tên gói và tên cơ sở dữ liệu của bạn trước khi sử dụng chức năng.

public static void backupDatabase() throws IOException { 
    //Open your local db as the input stream 
    String inFileName = "/data/data/your.package.name/databases/database.sqlite"; 
    File dbFile = new File(inFileName); 
    FileInputStream fis = new FileInputStream(dbFile); 

    String outFileName = Environment.getExternalStorageDirectory() 
                + "/database.sqlite"; 
    //Open the empty db as the output stream 
    OutputStream output = new FileOutputStream(outFileName); 
    //transfer bytes from the inputfile to the outputfile 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = fis.read(buffer))>0){ 
     output.write(buffer, 0, length); 
    } 
    //Close the streams 
    output.flush(); 
    output.close(); 
    fis.close(); 
} 

Như bạn có thể quan sát từ mã, cơ sở dữ liệu luôn được lưu trữ trong thư mục:

/data/data/your.package.name/databases/ 

Tên (trong ví dụ của chúng tôi "database.sqlite") là một trong những bạn chọn khi mở rộng SQLiteOpenHelper. Rõ ràng, bạn cũng cần phải thay thế "your.package.name" bằng tên của gói ứng dụng của bạn.

+4

Đây là một kỹ thuật tốt cho những người trong chúng ta mà không có điện thoại bắt nguồn từ. Chỉ cần chắc chắn rằng bạn thêm quyền WRITE_EXTERNAL_STORAGE nếu không nó sẽ không hoạt động. Nó đã bị bắt trong xử lý ngoại lệ của tôi vì vậy tôi đã bỏ lỡ nó. –

+0

Xin chào, tôi đã thử nhưng tôi không thực sự thấy tệp dữ liệu ở đâu? Tôi đang sử dụng các cửa sổ và tệp android của tôi được lưu trữ trong không gian làm việc, nhưng không có tệp dữ liệu nào theo gói của tôi –

1

Tôi tin rằng ứng dụng của bạn có thể thay đổi quyền unix của các tệp dữ liệu lưu trữ cục bộ của chúng để chúng có thể truy cập được vào các ứng dụng khác và adb.

Tuy nhiên, ứng dụng của bạn không thể thay đổi việc thiếu quyền danh sách trên thư mục/dữ liệu của điện thoại được bảo mật.

Kết quả là bạn sẽ phải lấy tệp bằng 'adb pull/full/path/to/file' - bạn không thể duyệt đến nó vì bạn không thể tạo danh sách/dữ liệu hoặc có thể là một số phụ huynh thư mục trung gian khác của tệp của bạn.

1

Thực sự về cách duy nhất xung quanh việc này là để đặt tệp của bạn một số nơi mà bạn có thể truy cập vào nó như ra trên sdcard trong quá trình phát triển. Sau đó, một khi bạn đang hài lòng những điều đang làm việc một cách chính xác đặt các tập tin mà bao giờ bạn muốn.

Tôi nói điều này vì tôi có Nexus One bán lẻ và Nexus One dành cho nhà phát triển. Trong khi sử dụng DDMS File Explorer, tôi nhận thấy tôi có thể duyệt thư mục dữ liệu trên thiết bị của nhà phát triển nhưng không thể trên thiết bị bán lẻ. Tôi bắt nguồn từ thiết bị bán lẻ của tôi và nó đã không giúp đỡ.

Vì vậy, tôi đoán nhiều nghiên cứu hơn phải được thực hiện đối với vấn đề này. Nhưng cho đến lúc đó tôi hy vọng điều này sẽ hữu ích.

2

Sao chép tập tin vào/mnt/sdcard sử dụng

cp /data/data/<packagename>/databases/<dbname>/<filename> /mnt/sdcard 

sử dụng adb và sau đó sao chép vào máy tính của bạn từ/mnt/sdcard sử dụng

adb pull /mnt/sdcard/<filename> 

và sau đó sử dụng sqlite3 để xem nó.

+2

. :) – yoshi

2

Bạn phải root thiết bị của mình. Đi tới dấu nhắc lệnh và chuyển đến vị trí đặt adb của bạn.

ví dụ:

C: \ Program Files \ Android \ android-sdk \ platform-công cụ

loại adb root. bây giờ đi đến thám hiểm tập tin của bạn và kiểm tra.

+0

oh của tôi .. như một cách dễ dàng để làm điều đó .. bạn là một cuộc sống tiết kiệm .. cảm ơn bạn rất nhiều .. –

Các vấn đề liên quan