2011-08-28 34 views
6

Tôi đang cố gắng sử dụng JDBC trong ứng dụng Android của mình để kết nối với cơ sở dữ liệu từ xa để thực hiện chèn, truy vấn, v.v. Tôi đã kết nối thành công và thực hiện những điều này trong một dự án JAVA khác. Vì vậy, tôi figured kể từ khi Android là Java, tôi có thể chỉ cổng trong mã có liên quan, thêm build path tương tự cho các lái xe, vv Tuy nhiên, nó mang lại cho tôi những lỗi:Android JDBC không hoạt động: ClassNotFoundException trên trình điều khiển

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

Tôi thực sự không nghĩ rằng đó là một vấn đề mã do cùng một mã hoạt động trong một dự án Java (mà tôi chỉ thực hiện trong main()). Nhưng để tham khảo ở đây là:

String url = "jdbc:mysql://localhost:3306/eventhub_test"; // 
    String user = "root"; 
    String pass = ""; 

SQLUtils sqlu = new SQLUtils(url, user, pass); 

// lớp SQLUtils tôi thực hiện:

public class SQLUtils { 


private String CONNECTION_URL; 
private String user; 
private String pass; 
private java.sql.Statement stmt; 
private java.sql.Connection conn; 

public SQLUtils(String conn_url, String user, String pass) { 
    this.CONNECTION_URL = conn_url; 
    this.user = user; 
    this.pass = pass; 
} 


public void init() throws IllegalAccessException, InstantiationException, ClassNotFoundException, SQLException { 

    Class.forName ("com.mysql.jdbc.Driver").newInstance(); 
    conn = DriverManager.getConnection(CONNECTION_URL, user, pass); 
    stmt = conn.createStatement(); 

} 
} 

Vì vậy, tôi thực sự nhầm lẫn ở đây. JDBC có hoạt động với Android không? Nếu có, hãy cho tôi biết những lựa chọn thay thế nào tôi nên xem xét để truy cập cơ sở dữ liệu MySQL từ xa.

Cảm ơn.

+0

giải pháp của bạn là ở đây: http: // stackoverflow.com/questions/15756230/android-is-jdbc-được hỗ trợ trong android-devices/18843518 # 18843518 – Behnam

+0

thử thay đổi tệp gradhe gradet targetSdkVersion 8 –

Trả lời

22

Does JDBC not work with Android?

JDBC không thường xuyên được sử dụng trên Android và tôi chắc chắn sẽ không khuyến nghị sử dụng.

IMHO, JDBC được thiết kế cho kết nối mạng có độ trễ cao, độ trễ thấp, độ tin cậy cao (ví dụ: máy tính để bàn đến máy chủ cơ sở dữ liệu, máy chủ ứng dụng web đến máy chủ cơ sở dữ liệu). Thiết bị di động cung cấp rất ít trong số này và không có thiết bị nào trong số đó liên tục.

If so, tell me what alternatives I should look into for remote MySQL database access.

Tạo dịch vụ web xung quanh cơ sở dữ liệu của bạn và truy cập từ Android.

Vì lợi ích phụ, bạn cải thiện bảo mật (so với việc mở cơ sở dữ liệu), có thể hỗ trợ tốt hơn các nền tảng khác (ví dụ: Web hoặc khung di động dựa trên web), v.v.

+0

yep, tôi quyết định đi với giải pháp dựa trên web. – JDS

+3

Chủ đề này khá cũ, nhưng tôi muốn chia sẻ rằng nó cần thiết để đặt mã kết nối và phần còn lại trong một chuỗi không đồng bộ không có trong chính hoặc Android sẽ cản trở nó. Bây giờ tôi đã có kết nối làm việc. – Mikel

2

Về lý thuyết, bạn có thể làm điều đó. Bạn cần bao gồm trình điều khiển JDBC của MySQL trong dự án của bạn để làm cho mã của bạn hoạt động (here là một bài tương tự với các giải pháp).

Nhưng có thể là not a good idea. Sẽ tốt hơn nếu bạn phơi bày các nội dung cơ sở dữ liệu thông qua một API (REST) ​​chuyên dụng trên máy chủ của bạn.

Họ không thực sự đưa ra lý do trong liên kết, nhưng một trong những lý do chính khiến ý tưởng không tốt là hiển thị trực tiếp cơ sở dữ liệu của bạn là do các mối lo ngại về bảo mật. Hầu hết người dùng của bạn sẽ cư xử tốt đẹp và chỉ làm những gì họ có nghĩa vụ phải làm với điện thoại của họ, nhưng hãy tưởng tượng một người không.

Nếu người đó có đăng nhập hợp lệ cho cơ sở dữ liệu của bạn, người đó có thể kết nối tới cơ sở dữ liệu của bạn, thực hiện tất cả các loại SELECT hoặc thậm chí có thể thay đổi/hủy dữ liệu nếu quyền đó cho phép. Vì vậy, đó là lý do tại sao bạn nên có một máy chủ web kết hợp và làm vệ sinh bất kỳ yêu cầu nào đến từ người dùng để đảm bảo rằng chỉ có dữ liệu bạn định đưa ra có thể được lấy từ cơ sở dữ liệu MySQL của bạn.

4

Bỏ qua các phản đối hợp lệ, bạn có thể làm cho nó hoạt động.

Đầu tiên chắc chắn rằng bạn có một jar lái xe hợp lệ trong bạn xây dựng con đường, tôi đã sử dụng

mysql-connector-java-5.1.7-bin.jar 

Thứ hai, nếu bạn đang cố gắng nó trong giả lập và db của bạn nằm trên máy bạn phát triển, 'localhost' là không tốt trong URL. Bạn cần '10 .0.2.2'

URL của tôi là:

String url = "jdbc:mysql://10.0.2.2/test"; 

thử nghiệm là tên db của tôi.

Tôi đã có một bảng gọi là 'cuốn sách' với một 'danh hiệu' cột trong nó

Các mã sau đây làm việc cho tôi:

public void init() throws IllegalAccessException, InstantiationException, 
     ClassNotFoundException, SQLException { 

    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    try { 
     conn = DriverManager.getConnection(CONNECTION_URL, user, pass); 
    } catch (java.sql.SQLException e1) { 
     e1.printStackTrace(); 
    } 
    try { 

     stmt = conn.createStatement(); 
     ResultSet rs = stmt.executeQuery("SELECT title FROM books"); 
     String entry; 
     while (rs.next()){ 
      entry = rs.getString(1); 
     } 
     rs.close(); 
     stmt.close(); 
     conn.close(); 
    } catch (java.sql.SQLException e) { 
     e.printStackTrace(); 
    } 

} 

Đẩy mạnh thông qua trong trình gỡ lỗi, tôi thấy tên trong mục nhập chuỗi

8

Tôi đã gặp phải sự cố với lý do này. Nó được đề cập ở những nơi khác mà chỉ có 3.017 trình điều khiển hoạt động, và kể từ khi tôi thực hiện các hướng dẫn chi tiết như vậy tôi figured tôi muốn chia sẻ chúng. (Mục đích ban đầu của tôi là cung cấp cho các bước để tái sản xuất lỗi rằng tôi có thể sử dụng để đặt một câu hỏi ở đây và các nơi khác. Không, tôi không thể bắt đầu đoán lý do tại sao tôi đã có rất nhiều rắc rối bây giờ nhìn lại)


Để : Nhận JDBC driver trong ứng dụng Android

  • New Android Project - AndroidJDBCTest, Target Android4.03, tối thiểu sdk 8 (Android 2.2), tên gói “com.test.AndroidJDBCTest”
  • nhấp chuột phải vào dự án, mới thư mục “libs”
  • Tải xuống trình điều khiển Mysql JDBC từ here và giải nén nó vào hệ thống tập tin của bạn.
  • Duyệt đến thư mục gốc sau khi trích xuất và kéo và thả jar mysql-connector-java-3.0.17-ga-bin.jar vào/libs trong dự án của bạn trong trình khám phá dự án bên trong Eclipse., Bằng cách sử dụng cài đặt "sao chép" mặc định để kéo và thả.
  • Nhấp chuột phải vào Dự án Eclipse, Xây dựng đường dẫn tạo cấu hình đường dẫn, Thêm JAR trong tab thư viện - Duyệt đến/AndroidJDBCTest/libs và tệp jar và nhấp vào ok
  • LƯU Ý: Nó hiện lên dưới "Thư viện tham chiếu" nút (nếu Eclipse được thiết lập để hiển thị nó)
  • Thêm mã từ here đến hết onCreate() - về cơ bản Class.forName("com.mysql.jdbc.Driver").newInstance();
  • Gắn thiết bị Honeycomb như Motorola Xoom phiên bản gia đình và chạy
0

Hãy chắc chắn rằng bạn có đặt đầu nối vào e thư mục thư viện của dự án. nơi nó ở đó, nó sẽ giải quyết vấn đề

-1

thử thay đổi inthe tập tin gradle

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