Cách sử dụng ADB trong Android Studio để xem SQLite DB


83

Tôi cần xem db SQLite của mình nhưng tôi không biết cách thực hiện. Tôi đã truy cập http://www.sqlite.org/download.html và tải xuống trình bao dòng lệnh cho hệ điều hành của mình, nhưng khi tôi chạy chương trình và nhập, adb ...tôi gặp lỗi.

Lưu ý: Tôi đang sử dụng Android Studio nên tôi cho rằng mình không cần cài đặt thêm bất kỳ thứ gì vì tôi nhớ lại Android Studio cho biết nó có tất cả các công cụ SDK cần thiết.

Câu trả lời:


160

Cách dễ nhất: Kết nối với Sqlite3 qua ADB Shell

Tôi không tìm thấy bất kỳ cách nào để làm điều đó trong Android Studio, nhưng tôi truy cập db bằng trình bao từ xa thay vì kéo tệp mỗi lần.

Tìm tất cả thông tin tại đây: http://developer.android.com/tools/help/sqlite3.html

1- Chuyển đến thư mục công cụ nền tảng của bạn trong dấu nhắc lệnh

2- Nhập lệnh adb devicesđể lấy danh sách các thiết bị của bạn

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb devices
List of devices attached
emulator-xxxx   device

3- Kết nối shell với thiết bị của bạn:

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb -s emulator-xxxx shell

4a- Bạn có thể bỏ qua bước này trên thiết bị đã root

run-as <your-package-name> 

4b- Điều hướng đến thư mục chứa tệp db của bạn:

cd data/data/<your-package-name>/databases/

5- chạy sqlite3 để kết nối với db của bạn:

sqlite3 <your-db-name>.db

6- chạy các lệnh sqlite3 mà bạn thích, ví dụ:

Select * from table1 where ...;

Lưu ý: Tìm thêm lệnh để chạy bên dưới.

Bảng gian lận SQLite

Có một số bước để xem các bảng trong cơ sở dữ liệu SQLite:

  1. Liệt kê các bảng trong cơ sở dữ liệu của bạn:

    .tables
    
  2. Liệt kê giao diện của bảng:

    .schema tablename
    
  3. In toàn bộ bảng:

    SELECT * FROM tablename;
    
  4. Liệt kê tất cả các lệnh nhắc SQLite có sẵn:

    .help
    

1
phương pháp này có yêu cầu root không?
tomislav2012

1
@ tomislav2012 vâng vì bạn đang truy cập /data/datathư mục
Dheeraj Bhaskar

1
sqlite3 lệnh không được công nhận trên HTC One S của tôi chạy Android 4.1
Alex

@ Alex Tôi muốn đề nghị tìm sqlite3 và cài đặt nó nếu nó có thể, phát triển là đơn giản hơn với nó
Dheeraj Bhaskar

1
Cảm ơn. Trong trường hợp bạn muốn chuyển tệp sqlite sang màn hình máy tính của mình, trước tiên bạn có thể cp /data/data/<your-package-name>/databases/<your-db-name>.db /sdcard. Sau đó, sử dụng trình quản lý tệp như Explorer, để gửi tệp đến email của bạn. :)
Cheok Yan Cheng

76

Cách dễ nhất đối với tôi là sử dụng Android Device Monitor để lấy tệp cơ sở dữ liệu và SQLite DataBase Browser để xem tệp trong khi vẫn sử dụng Android Studio để lập trình android.

1) Chạy và khởi chạy ứng dụng cơ sở dữ liệu với trình giả lập Android từ Android Studio. (Tôi đã chèn một số dữ liệu vào ứng dụng cơ sở dữ liệu để xác minh)

2) Chạy Android Device Monitor. Làm thế nào để chạy ?; Đi tới [your_folder] > sdk >tools. Bạn có thể thấy monitor.bat trong thư mục đó. shift + right clickbên trong thư mục và chọn " Open command window here". Hành động này sẽ khởi chạy dấu nhắc lệnh. loại monitorvà Màn hình thiết bị Android sẽ được khởi chạy.

3) Chọn trình giả lập mà bạn hiện đang chạy. Sau đó đi đếndata>data>[your_app_name]>databases

4) Nhấp vào biểu tượng (nằm ở góc trên cùng bên phải) (di chuột vào biểu tượng và bạn sẽ thấy "kéo tệp từ thiết bị") và lưu ở bất kỳ đâu bạn thích

5) Khởi chạy trình duyệt SQLite DataBase. Kéo và thả tệp bạn vừa lưu vào Trình duyệt đó.

6) Chuyển đến Browse Datatab và chọn bảng của bạn để xem.

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


9
Tôi nghĩ rằng bạn không thể mở thư mục dữ liệu từ Device Monitor, ít nhất là tôi không thể làm điều đó.
Estevex

6
Bạn không thể mở thư mục dữ liệu trên thiết bị chưa root, nhưng bạn có thể làm điều đó trên trình giả lập.
Tad

3
làm thế nào để mở dữ liệu trên một thiết bị không root?
Sujith Manjavana

4
Trong khi trình giả lập đang chạy, bạn có thể tải xuống các tệp từ Android giả lập bằng cách sử dụng adb. Ví dụ: adb pull /data/data/com.yourpackagename.here/databases/yourdbfile.db
Baker

Tôi nghĩ @SujithManjavana đang nói về việc chỉ mở cơ sở dữ liệu sqlite từ DataBase Browser khi nó đang ở trong đường dẫn giả lập trong hệ điều hành khách. Không phải sau khi sao chép trở lại hệ điều hành máy chủ.
Pradeep Sanjaya

14

Vấn đề bạn đang gặp phải là phổ biến và không được giải thích rõ trong tài liệu. Các thiết bị thông thường không bao gồm tệp nhị phân cơ sở dữ liệu sqlite3, đó là lý do tại sao bạn gặp lỗi. Android Emeulator, OSX, Linux (nếu được cài đặt) và Windows (sau khi cài đặt) có tệp nhị phân để bạn có thể mở cơ sở dữ liệu cục bộ trên máy của mình.

Cách giải quyết là sao chép Cơ sở dữ liệu từ thiết bị của bạn sang máy cục bộ của bạn. Điều này có thể được thực hiện với ADB nhưng yêu cầu một số bước.

Trước khi bắt đầu, bạn sẽ cần một số thông tin:

  • đường dẫn của SDK (nếu không có trong môi trường OS của bạn)
  • của bạn <package name>, ví dụ,com.example.application
  • a <local path>để đặt cơ sở dữ liệu của bạn, ví dụ. ~/Desktophoặc là%userprofile%\Desktop

Tiếp theo, bạn sẽ cần phải hiểu mỗi lệnh được ghi vào ký tự đầu tiên trong các ví dụ dưới đây sẽ không được nhập nhưng cho bạn biết chúng ta đang sử dụng trình bao nào:

  • > = you OS command prompt
  • $ = Nhắc lệnh shell ADB
  • ! = ADB shell dưới dạng dấu nhắc lệnh của quản trị viên
  • %

Tiếp theo, nhập các lệnh sau từ Terminal hoặc Command (không nhập ký tự đầu tiên hoặc văn bản trong ())

> adb shell
$ su
! cp /data/data/<package name>/Databases/<database name> /sdcard
! exit
$ exit
> adb pull /sdcard/<database name> <local path>
> sqlite3 <local db path>
% .dump
% .exit  (to exit sqldb)

Đây là một vòng thực sự về cách sao chép cơ sở dữ liệu vào máy cục bộ của bạn và đọc cục bộ cơ sở dữ liệu. Có SO và các tài nguyên khác giải thích cách cài đặt tệp nhị phân sqlite3 vào thiết bị của bạn từ trình giả lập nhưng truy cập một thời gian, quy trình này hoạt động.

Nếu bạn cần truy cập cơ sở dữ liệu một cách tương tác, tôi khuyên bạn nên chạy ứng dụng của bạn trong trình giả lập (đã có sqlite3) hoặc cài đặt sqlite vào đường dẫn thiết bị / xbin của bạn .


9
  1. Mở một thiết bị đầu cuối
  2. cd <ANDROID_SDK_PATH>(đối với tôi trên Windows cd C:\Users\Willi\AppData\Local\Android\sdk)
  3. cd platform-tools
  4. adb shell (điều này chỉ hoạt động nếu chỉ có một trình giả lập đang chạy)
  5. cd data/data
  6. su (đạt được đặc quyền của người dùng cấp cao)
  7. cd <PACKAGE_NAME>/databases
  8. sqlite3 <DB_NAME>
  9. phát hành câu lệnh SQL ( quan trọng: chấm dứt chúng bằng ;, nếu không câu lệnh không được phát hành và thay vào đó, câu lệnh sẽ bị ngắt thành một dòng mới.)

Lưu ý: Sử dụng ls(Linux) hoặc dir(Windows) nếu bạn cần liệt kê nội dung thư mục.


8

Nó đề cập đến điều gì khi bạn nhập adb?

step1. >adb shell
step2. >cd data/data
step3. >ls -l|grep "your app package here"
step4. >cd "your app package here"
step5. >sqlite3 xx.db

Chà ... Tôi không biết phải nhập ở đâu adb... Khi tôi nhập nó vào SQLite3 shell, nó sẽ cho tôi ...>và nó đang mong đợi một lệnh tiếp tục. Cơ bản là đang chờ a ;. Nếu tôi nhập dấu chấm phẩy, tôi nhận được error: near "adb": syntax error... Việc nhập adb shellvào dấu nhắc lệnh cho tôi biết adb không phải là lệnh được công nhận ... Tôi có phải thêm adb vào tệp đường dẫn của mình không?
Terence Chow

đầu tiên: bạn phải truy cập vào adb shell (mac hoặc linux: thực thi trong terminal; windows: chạy tại cmd); sau đó thực thi sqlite3 commond trong adb shell.
log1000

1
Làm cách nào để thực thi lệnh sqlite3 từ trình bao ADB? nó nói: /system/bin/sh: sqlite3: not found... Và tôi đã thêm SQLite3 và ADB như biến đường dẫn đã ...
Terence Chow

? những gì thiết bị bạn sử dụng muốn điều này sẽ cung cấp cho ou một gợi ý stackoverflow.com/questions/3645319/...
log1000

5

Bạn có thể sử dụng một công cụ rất hay có tên Stethobằng cách thêm công cụ này vào build.gradletệp:

compile 'com.facebook.stetho:stetho:1.4.1'

Và khởi tạo nó bên trong Applicationhoặc Activity onCreate()phương thức của bạn :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Stetho.initializeWithDefaults(this);
    setContentView(R.layout.activity_main);
}

Sau đó, bạn có thể xem các bản ghi db trong chrome tại địa chỉ:

chrome://inspect/#devices

Để biết thêm chi tiết, bạn có thể đọc bài đăng của tôi: Cách dễ dàng xem các bản ghi db của bạn


4

Tùy thuộc vào thiết bị, bạn có thể không tìm thấy lệnh sqlite3 trong adb shell. Trong trường hợp đó, bạn có thể muốn làm theo điều này:

vỏ adb

$ run-as package.name
$ cd ./databases/
$ ls -l # Tìm các quyền hiện tại - r = 4, w = 2, x = 1
$ chmod 666 ./dbname.db
$ exit
$ exit
adb pull / data /data/package.name/databases/dbname.db ~ / Desktop /
adb push ~ / Desktop / dbname.db /data/data/package.name/databases/dbname.db
adb shell
$ run-as package.name
$ chmod 660 ./databases/dbname.db # Khôi phục quyền ban đầu
$ exit
$ exit

để tham khảo, hãy truy cập https://stackoverflow.com/a/17177091/3758972 .

Có thể có trường hợp bạn nhận được "không tìm thấy đối tượng từ xa" sau khi làm theo quy trình trên. Sau đó, thay đổi quyền của thư mục cơ sở dữ liệu của bạn thành 755 trong adb shell.

Cơ sở dữ liệu $ chmod 755 /

Nhưng xin lưu ý rằng nó sẽ chỉ hoạt động trên phiên bản Android <21.


Đã thử điều này (bắt đầu với "adb shell", sau đó thực hiện "chmod", sau đó thực hiện "adb pull" của cơ sở dữ liệu) nhưng nhận được "adb: error: failed to stat remote object '/ path / to / db': Quyền bị từ chối "lỗi. Và "chmod 666" dường như hoạt động (dù sao thì không có lỗi). Tôi đã có thể kéo tệp db bằng Android Device Monitor trước đây nhưng nếu tôi thử nó bây giờ, tôi thậm chí không thể mở rộng thư mục "dữ liệu" ban đầu. Tôi đã thử Trình theo dõi thiết bị Android với cửa sổ trình giả lập đang chạy và không chạy với cùng kết quả. Chúa ơi, điều này thật ngu ngốc.
ngaoum

Là một bản hack mới, bạn có thể sử dụng thư viện stetho cho tất cả dữ liệu và mục đích giám sát mạng. github.com/facebook/stetho
Nitesh Verma

Hmmm, vâng, tôi đoán tôi sẽ phải sử dụng Stetho. Tôi đã thấy nó được đề xuất trước đây nhưng không nhận ra rằng tôi có thể chạy các truy vấn SQL với nó, vì vậy nó sẽ hoạt động với tôi. Tôi không sử dụng trình duyệt Chrome nữa nhưng nếu việc cài đặt nó cho phép tôi kiểm tra và truy vấn đối với Android dbs, thì tôi sẽ làm điều đó. Nó không giống như cách Android Device Monitor quá nhanh, bạn vẫn phải kéo db sau đó mở nó trong một ứng dụng khác. Cảm ơn Nitesh.
ngaoum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.