Câu hỏi này đã 6 tuổi và Mark đúng rằng, trong hầu hết mọi tình huống bạn có thể nghĩ ra, JDBC trên Android cũng hợp lý như việc bạn cố gắng sử dụng máy nướng bánh mì trong bồn tắm. Tuy nhiên, đôi khi chúng ta làm mọi việc bởi vì chúng ta có thể và không vì chúng ta nhất thiết phải làm, và hôm nay tôi có lý do chính đáng để muốn làm điều này (đối với một ứng dụng cụ thể rất thích hợp chạy trong một môi trường không bình thường), đó là cách tôi tìm ra câu hỏi này.
Giải quyết NoClassDefFoundError
đầu tiên, lý do tại sao nó không bị bắt bởi catch
khối là do đó là Error
không phải là Exception
. Cả Error
và Exception
kế thừa từ Throwable
, vì vậy bạn có thể nắm bắt điều đó thay thế:
catch (Throwable t)
{
// This will catch NoClassDefFoundError
}
Tôi tin rằng đó không phải là MySqlDataSource
mà nó không thể tìm thấy, nhưng một trong các lớp hoặc giao diện mà nó phụ thuộc vào - trong trường hợp của tôi, đó là javax.naming.Referenceable
. Android không cung cấp javax.naming
vì vậy việc cố gắng sử dụng các tính năng tổng hợp của trình điều khiển Connector / J JDBC cho MySQL sẽ không giúp bạn tiến xa (bạn có thể cố gắng cung cấp các phụ thuộc còn thiếu nhưng con đường đó có thể dẫn đến sự điên rồ).
Thay vào đó, bạn có thể gặp nhiều may mắn hơn với việc triển khai nhóm kết nối của bên thứ ba. Có nhiều thư viện Java khác nhau để thực hiện việc này. Một số trong số chúng sẽ hoạt động trên Android. Một cái mà tôi đã xác minh có hoạt động không là HikariCP . Có hướng dẫn để định cấu hình nó tại đây và đặc biệt cho MySQL, tại đây .