2015-01-20 52 views
1

连接到我的远程MySQL我有两个类似的计划。第一个:Java适用于PC,第二个:Android。我的本地网络中有一台IP地址为192.168.0.103的MacOS Pro服务器。 MacOS的服务器已经得到的MySQL服务器5.0.1,与我无法通过Android SDK中

CREATE DATABASE db_demo01; 
CREATE USER 'user01'@'%' IDENTIFIED BY '1234567'; 
GRANT ALL ON db_demo01.* TO 'user01'@'%'; 

我的PC应用程序有以下代码:

  String driver = "com.mysql.jdbc.Driver"; 
      String url = "jdbc:mysql://192.168.0.103:3306/"; 
      String dbName = "db_demo01"; 
      String userName = "user01"; 
      String userPass = "1234567"; 

      try 
      { 
       Class.forName(driver); 
       Connection conn = DriverManager.getConnection(url+dbName,userName,userPass); 
       System.out.println("Connected!"); 
       conn.close(); 
      } 
      catch(Exception ex) 
      { 
       System.out.println("Error:" + ex.getMessage()); 
      } 

这是工作,但是当我试图用我的Android应用程序要做到这一点,我”! v连接失败。我不知道为什么......我下面贴我的应用程序的全码:

package com.navi.newser; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

import android.graphics.Color; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TableLayout; 
import android.widget.TableRow; 
import android.widget.TextView; 

public class MainActivity extends ActionBarActivity { 

    /// VARIABLES 
    private TextView textWidget; 
    private TableLayout tableWidget; 

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

     CreateOnClickConnect(); 
    } 

    private void CreateOnClickConnect() 
    { 
     textWidget = (TextView)findViewById(R.id.textView1); 
     tableWidget = (TableLayout)findViewById(R.id.table1); 
     Button cmd = (Button)this.findViewById(R.id.button3); 
     cmd.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       ConnectToMySQL(); 
      } 
     }); 
    } 

    private class Connect extends AsyncTask<String, String, String> { 
     @Override 
     protected String doInBackground(String... urls) 
     { 
      String response = ""; 

      String driver = "com.mysql.jdbc.Driver"; 
      String url = "jdbc:mysql://192.168.0.103:3306/"; 
      String dbName = "db_demo01"; 
      String userName = "user01"; 
      String userPass = "1234567"; 
      Connection conn = null; 
      try 
      { 
       Class.forName(driver).newInstance(); 
       conn = DriverManager.getConnection(url+dbName,userName,userPass); 
       response += "Connected!"; 
       Log.e("MySQL", response); 
       conn.close(); 
      } 
      catch(Exception ex) 
      { 
       ex.printStackTrace(); 
       response += "Error:" + ex.getMessage(); 
       Log.e("MySQL", response); 
      } 
      publishProgress("Almost..."); 
      return response; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      textWidget.setText(result); 
     } 

     @Override 
     protected void onProgressUpdate(String... text) { 
      textWidget.setText(text[0]); 
     } 
    } 

    public void ConnectToMySQL() 
    { 
     new Connect().execute(); 
    } 

enter image description here

我使用Eclipse月神。

01-20 19:09:07.777: E/dalvikvm(1069): Could not find class 'javax.naming.StringRefAddr', referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.storeTo 

我没有其他错误。

+0

我建议你检查mysql的设置,主要是为了“绑定”的地址,如果你的服务器只监听localhost,那么就不会接受来自不同的IP连接,althoug我不知道,如果Android模拟器拥有自己的IP – 2015-01-20 19:39:46

回答

0

与此

emulator -avd avdname -http-proxy http://192.168.0.1:8080

启动模拟器这里更换avdname您要运行AVD的名字程序和http:192.168.1.1到您的代理服务器。

original answer

0

那么你必须做出一些设置;首先模拟器并不总是一个好主意,而中间是互联网连接。此外,连接器的库(jar)应该位于Android项目中名为lib的文件夹中。对于MySQL交互,我使用JSON和PHP。我希望这对你有所帮助!