2014-02-13 34 views
0

我有我想從我的Android設備連接到遠程MySQL服務器,我測試過上一個普通的Java控制檯應用程序代碼和它的作品完美的罰款MySQL的使用Java而不是Android的

但是當我在Android模擬器上運行它會拋出SQLException:沒有合適的驅動程序。

代碼是一樣的,MySQL的細節是一樣的,我使用了相同的兩個人的mysql jar,我真的很無能。

的Android代碼:

public class MySQL_handler { 
    Connection con = null; 
    Statement st = null; 
    ResultSet rs = null; 


    String url1,user,password; 


    Thread thread; 
    Runnable runnable; 

    String data = ""; 

    public MySQL_handler() { 
     user = "xx"; 
     password = "xx"; 
     url1 = "xx"; 

    } 

    public String test(){ 
     final CountDownLatch latch = new CountDownLatch(1); 
     runnable = new Runnable() { 

      @Override 
      public void run() { 

       try 
       { 
        Log.v("S", url1); 
        Log.v("S", user); 
        Log.v("S", password); 
        con = DriverManager.getConnection(url1, user, password); 
        st = con.createStatement(); 
        rs = st.executeQuery("SELECT CompName FROM Servers WHERE HostIP = '10.0.0.4'"); 

        if (rs.next()) 
        { 
         Log.v("sqlver",""+ rs.getString(1)); 
         data = rs.getString(1); 
        } 
        else{ 
         Log.v("sqlver","err"); 
        } 

       } 
       catch (SQLException ex) 
       { 
        Log.v("SQLEX", ".."+ex); 

       } 
       finally { 
        try 
        { 
         if (rs != null) 
         { 
          rs.close(); 
         } 
         if (st != null) 
         { 
          st.close(); 
         } 
         if (con != null) 
         { 
          con.close(); 
         } 
         latch.countDown(); 

        } 
        catch (SQLException ex) 
        { 
         Log.v("SQLEX", "..."); 
         latch.countDown(); 
        } 
       } 

      } 
     }; 
     thread = new Thread(runnable); 
     thread.start(); 
     try { 
      latch.await(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     return data; 
    } 
} 
+0

請檢查您的JAR庫中是否存在用於此目的的正確路徑(它必須位於項目文件夾內) – nKn

回答

1

嘗試之前

Class.forName("here your driver class name"); 

加載驅動程序順便說一句,我必須提醒你,這是不是在生產的最佳實踐,試圖打開一個數據庫連接從移動設備上下載(但如果是進行學術練習,請繼續)

+0

這不是問題。似乎OP通過'DriverManager.getConnection(url1,user,password)獲得連接;'因此不需要手動打開連接= \ –

+0

問題是'DriverManager.getConnection'表示處理來自您的java客戶端代碼的連接:bad在客戶端應用程序的想法,因爲它會耗盡你的數據庫資源與足夠的開放客戶端。公正的警告! :)然後用您的驅動程序的名稱嘗試Class.forName;它會讓你的代碼運行 –

+1

事實上,試圖直接連接一個android設備直接與數據庫引擎如MySQL是一個壞主意,首先...你應該通過服務層從外部資源,如REST Web服務另一臺服務器在PHP,Java或其他平臺上運行服務。無論如何,假設jar連接到mysql是在構建路徑中,添加此行將使它*工作*。 –

相關問題