2014-11-03 5 views
0

Я пытаюсь создать простое приложение hello world, которое использует jdbc для запроса результатов mysql и retrieve/println.JDBC/MYSQL Ошибка связи связи (ECLIPSE/ANDROID)

Im используя этот учебник от учебников точки принят для андроида кода:

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 

Im получают эти ошибки:

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. –

ответ

0

Это часто происходит, когда MySQL достигает максимального количества одновременных подключений. Попробуйте перезапустить MySQL.

Если вам требуется больше одновременных соединений, вы можете обновить my.cnf, добавив следующую строку в разделе [туздЫ]:

max_connections=x 

где х это максимальное количество одновременных соединений.

Вы можете просмотреть количество активных соединений, запустив:

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? Попробуйте изменить хост в URL-адресе; теперь вы пытаетесь подключиться к localhost: static final String DB_URL = "jdbc: mysql: // localhost/EMP";

Вы не можете запустить mysql на Android-телефоне, вы можете выбрать другой db, если хотите выполнить его на локальном (например, вы можете использовать SQLite).

+0

Но если я захочу использовать SQLite, разве данные не будут сохранены на телефоне? – Jacs

+0

SQLite будет запущен на вашем телефоне; поэтому ваши данные будут на телефоне. Если вы хотите запрашивать данные на внешнем db, у вас должно быть несколько веб-сервисов для предоставления ваших данных клиенту android. – ricgra

+0

, то как использовать внешнюю базу данных (на сервере) для хранения данных и запроса с телефона? – Jacs

Смежные вопросы