2011-08-28 13 views
6

我想在我的Android應用程序中使用JDBC連接到遠程數據庫來執行插入,查詢等。我已成功連接並在不同的JAVA項目中完成這些事情。所以我想既然Android是Java的,我可以在相關代碼端口,添加相同的構建路徑驅動程序等,但它給我的錯誤:Android的JDBC不工作:驅動上的ClassNotFoundException

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

我真的不認爲這是一個代碼問題,因爲相同的代碼在Java項目中工作(我只是在main()中執行)。但是,以供參考是:

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

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

//的SQLUtils類我做:

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(); 

} 
} 

所以我真的很困惑在這裏。 JDBC不適用於Android?如果是這樣,告訴我我應該考慮什麼替代方案來實現遠程MySQL數據庫訪問。

謝謝。

+0

您的解決方案是在這裏:HTTP://計算器。com/questions/15756230/android-is-jdbc-supported-in-android-devices/18843518#18843518 – Behnam

+0

嘗試更改gradle文件 targetSdkVersion 8 –

回答

22

Does JDBC not work with Android?

JDBC在Android上很少使用,我當然不會推薦它。 IMHO,JDBC專爲高帶寬,低延遲,高度可靠的網絡連接(例如桌面到數據庫服務器,Web應用服務器到數據庫服務器)而設計。移動設備很少提供這些功能,而且它們中的任何一項都不一致

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

在您的數據庫周圍創建一個Web服務並從Android訪問它。

作爲附帶好處,可以提高安全性(相對於離開你的數據庫打開),可以從客戶端卸載一些業務邏輯,可以更好地支持其他平臺(例如,網站或基於Web的移動架構)等

+0

是的,我決定使用基於Web的解決方案。 – JDS

+3

這個線程已經很老了,但我想分享一下,有必要把連接代碼和其他的代碼放在一個異步線程中,而不是在主線程中,否則Android會阻止它。現在我已經有了連接工作。 – Mikel

2

理論上你應該可以做到這一點。您需要在您的項目中包含MySQL JDBC驅動程序Jar以使您的代碼正常工作(here是帶有解決方案的類似帖子)。可能是not a good idea。如果您通過服務器上的專用(REST)API公開數據庫內容,則會更好。

他們並沒有在鏈接中給出理由,但直接公開數據庫不好的主要原因之一是出於安全考慮。你的大部分用戶都會表現得很好,只做他們應該用手機做的事情,但想象一下不會。

如果他有一個有效的數據庫登錄名,那麼他/她可能會簡單地連接到你的數據庫,做各種SELECT,或者如果權限允許他更改/銷燬數據。

所以這就是爲什麼你應該有一箇中間的Web服務器來驗證和清理來自用戶的任何請求,以確保只有你想要分發的數據可以從你的MySQL數據庫中檢索。

4

撇開有效異議,你可以使它的工作。

首先要確保你有你構建路徑的有效駕駛罐子,我用

mysql-connector-java-5.1.7-bin.jar 

其次,如果你是在模擬器嘗試它和你的數據庫是在你的開發機,「localhost」的是在URL中沒有用處。你需要'10 .0.2.2'

我的網址是:

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

測試是我的數據庫名。

我有一個名爲「圖書」與列「標題」表中它

下面的代碼對我的作品:

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(); 
    } 

} 

在調試器步進經過,我看到標題在字符串條目

8

由於某種原因,我有這樣的麻煩。 在其他地方提到只有3.017驅動程序有效,而且由於我提出了詳細的指示,我想我會分享它們。 (我最初的目的是爲了給重現步驟,我可以用在這裏和其他地方問一個問題的錯誤。不,我不能開始猜測爲什麼我有這麼多的麻煩,現在回頭看)


要:在Android應用程序獲取JDBC驅動程序

  • 新的Android項目 - AndroidJDBCTest,目標Android4.03,最低8 SDK(Android 2.2的),包名「com.test.AndroidJDBCTest」
  • 右鍵單擊項目,新文件夾「libs」
  • 從012下載Mysql JDBC驅動程序並將其解壓縮到您的文件系統。
  • 提取後瀏覽到根目錄,並使用拖放的默認「複製」設置將jar mysql-connector-java-3.0.17-ga-bin.jar拖放到Eclipse項目資源管理器中的項目的/ libs中。
  • 在Eclipse項目上右鍵點擊,構建路徑,配置構建路徑,添加JAR庫選項卡下 - 瀏覽/ AndroidJDBCTest /庫和jar文件,然後點擊OK
  • 注:現在顯示了在「引用的庫」節點(如Eclipse中設置爲顯示它)從here
  • 代碼添加到的onCreate()結束 - 基本上Class.forName("com.mysql.jdbc.Driver").newInstance();
  • 連接蜂窩設備,如摩托羅拉的Xoom家庭版和運行
0

請確保您有放置連接器e項目的庫文件夾。 將它放在這裏,它會解決這個問題

-1

嘗試改變在礦井gradle這個文件

targetSdkVersion 8 
相關問題