2014-11-03 66 views
0

我一直在試圖製作一個簡單的Hello World應用程序,它使用jdbc來查詢mysql並檢索/ println結果。JDBC/MYSQL通信鏈接失敗(ECLIPSE/ANDROID)

進出口使用從教程本教程點採用的Android代碼:

http://www.tutorialspoint.com/jdbc/jdbc-sample-code.htm

這裏是我採用的版本:

package com.example.myfirstapp0006; 

    import android.support.v7.app.ActionBarActivity; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import java.sql.*; 

    public class MainActivity extends ActionBarActivity { 

     // JDBC driver name and database URL 
     static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
     static final String DB_URL = "jdbc:mysql://localhost/EMP"; 

     // Database credentials 
     static final String USER = "username"; 
     static final String PASS = "password"; 

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

      Connection conn = null; 
      Statement stmt = null; 
      try{ 
       // STEP 2: Register JDBC driver 
       Class.forName("com.mysql.jdbc.Driver"); 

       // STEP 3: Open a connection 
       System.out.println("Connecting to database..."); 
       conn = DriverManager.getConnection(DB_URL,USER,PASS); 

       // STEP 4: Execute a query 
       System.out.println("Creating statement..."); 
       stmt = conn.createStatement(); 
       String sql; 
       sql = "SELECT id, first, last, age FROM Employees"; 
       ResultSet rs = stmt.executeQuery(sql); 

       // STEP 5: Extract data from result set 
       while(rs.next()) { 
        // Retrieve by column name 
        int id = rs.getInt("id"); 
        int age = rs.getInt("age"); 
        String first = rs.getString("first"); 
        String last = rs.getString("last"); 

        // Display values 
        System.out.println("ID: " + id); 
        System.out.println(", Age: " + age); 
        System.out.println(", First: " + first); 
        System.out.println(", Last: " + last); 
       } 

       // STEP 6: Clean-up environment 
       rs.close(); 
       stmt.close(); 
       conn.close(); 
      }catch(SQLException se){ 
       //Handle errors for JDBC 
       se.printStackTrace(); 
      }catch(Exception e){ 
       //Handle errors for Class.forName 
       e.printStackTrace(); 
      }finally{ 
       //finally block used to close resources 
       try{ 
        if(stmt != null) 
         stmt.close(); 
       }catch(SQLException se){ 
        se.printStackTrace(); 
       }//end finally try 
      }//end try 
      System.out.println("Goodbye!"); 
     }//end onCreate 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
}//end MainActivity 

即時得到這些錯誤:

11-03 18:55:14.854: W/System.err(389) com.mysql.jdbc.CommunicationsException: Communications link failure 
11-03 18:55:14.854: W/System.err(389): The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 
11-03 18:55:14.854: W/System.err(389): at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1032) 
11-03 18:55:14.864: W/System.err(389): at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:338) 
11-03 18:55:14.864: W/System.err(389): at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2232) 
11-03 18:55:14.864: W/System.err(389): at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2265) 
11-03 18:55:14.864: W/System.err(389): at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2064) 
11-03 18:55:14.864: W/System.err(389): at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:790) 
11-0 18:55:14.864: W/System.err(389): at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:392) 
11-03 18:55:14.874: W/System.err(389): at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325) 
11-03 18:55:14.874: W/System.err(389): at java.sql.DriverManager.getConnection(DriverManager.java:191) 
11-0 18:55:14.874: W/System.err(389): at java.sql.DriverManager.getConnection(DriverManager.java:226) 
11-0 18:55:14.874: W/System.err(389): at com.example.myfirstapp0006.MainActivity.onCreate(MainActivity.java:32) 
11-03 18:55:14.874: W/System.err(389): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-03 18:55:14.883: W/System.err(389): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-03 18:55:14.883: W/System.err(389): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-03 18:55:14.883: W/System.err(389): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-0 18:55:14.883: W/System.err(389): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-03 18:55:14.883: W/System.err(389): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-03 18:55:14.894: W/System.err(389): at android.os.Looper.loop(Looper.java:123) 
11-03 18:55:14.894: W/System.err(389): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-0 18:55:14.894: W/System.err(389): at java.lang.reflect.Method.invokeNative(Native Method) 
11-0 18:55:14.894: W/System.err(389): at java.lang.reflect.Method.invoke(Method.java:521) 
11-03 18:55:14.894: W/System.err(389): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-03 18:55:14.894: W/System.err(389): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-0 18:55:14.894: W/System.err(389): at dalvik.system.NativeStart.main(Native Method) 
11-03 18:55:14.894: W/System.err(389): Caused by: java.net.SocketException: Permission denied 
11-03 18:55:14.904: W/System.err(389): at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocketImpl(Native Method) 
11-03 18:55:14.904: W/System.err(389): at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocket(OSNetworkSystem.java:186) 
11-03 18:55:14.904: W/System.err(389): at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:265) 
11-03 18:55:14.904: W/System.err(389): at java.net.Socket.startupSocket(Socket.java:774) 
11-03 18:55:14.904: W/System.err(389): at java.net.Socket.<init>(Socket.java:316) 
11-0 18:55:14.904: W/System.err(389): at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:243) 
11-03 18:55:14.913: W/System.err(389): at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:297) 
11-03 18:55:14.913: W/System.err(389): ... 22 more 

有關於此的任何線索?

+0

確保MySQL正在運行並偵聽端口3306. – 2014-11-03 19:40:02

回答

0

當MySQL達到最大併發連接數時,通常會發生這種情況。嘗試重新啓動MySQL。其中x是併發連接的最大數目

max_connections=x 

如果你需要更多的併發連接,您可以通過以下的[mysqld]加入這一行更新的my.cnf。

您可以通過運行查看活動連接數:

SHOW STATUS WHERE `variable_name` = 'Threads_connected' 

有MySQL的網站上的更多信息,以及:

http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

0

的Android默認情況下具有內置SqlLite數據庫。你有沒有安裝mysql數據庫作爲額外的軟件包。你的mysql數據庫位於哪裏?

請參閱本link

0

你在哪裏安裝mysql? 嘗試更改網址中的主機;現在你正在嘗試連接到本地主機: static final String DB_URL =「jdbc:mysql:// localhost/EMP」;

你不能在android手機上運行mysql,你可以選擇其他數據庫,如果你想在本地執行它(例如你可以使用SQLite)。

+0

但是,如果我選擇使用SQLite,數據將不會保存在手機上嗎? – Jacs 2014-11-03 20:20:12

+0

SQLite將在您的手機上運行;所以你的數據將在手機上。如果你想查詢外部數據庫的數據,你必須有一些Web服務來將你的數據提供給Android客戶端。 – ricgra 2014-11-03 20:24:00

+0

那麼如何使用外部數據庫(在服務器上)來存儲數據並從手機中查詢它? – Jacs 2014-11-03 20:29:06

相關問題