2012-02-18 113 views
2

在android中使用mysql连接通过jdbc在java中成功完成登录表单...它在我的本地主机上成功工作...但发展网站没有工作...以下错误显示。jdbc连接socketexception错误

java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.SocketException: java.net.ConnectException: Connection timed out: connect 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException 
MESSAGE: java.net.ConnectException: Connection timed out: connect 

STACKTRACE: 

java.net.SocketException: java.net.ConnectException: Connection timed out: connect 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:143) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:225) 
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:1805) 
    at com.mysql.jdbc.Connection.<init>(Connection.java:452) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at com.retrieve.retrieve.main(retrieve.java:15) 


** END NESTED EXCEPTION ** 


    at com.mysql.jdbc.Connection.createNewIO(Connection.java:1875) 
    at com.mysql.jdbc.Connection.<init>(Connection.java:452) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at com.retrieve.retrieve.main(retrieve.java:15) 

为什么发生错误发生。给我一些解决方案。 如果正在运行本地主机意味着我的SQL查询

   package com.example.login; 


import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import android.app.Activity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class LoginLayoutActivity extends Activity { 


    EditText username,password; 
    TextView error; 
    Button ok; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     username=(EditText)findViewById(R.id.et_un); 
     password=(EditText)findViewById(R.id.et_pw); 
     error=(TextView)findViewById(R.id.tv_error); 
     ok=(Button)findViewById(R.id.btn_login); 

     ok.setOnClickListener(new View.OnClickListener() { 



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

       Editable user = username.getText(); 
       Editable pass = password.getText(); 

       try { 

        **Class.forName("com.mysql.jdbc.Driver"); 

         Connection con = DriverManager.getConnection("jdbc:mysql://localhost/people", "root", ""); 
         Statement st = con.createStatement(); 


         ResultSet rs = st.executeQuery("SELECT password FROM customers where login='"+user+"'");** 

         if(rs.next()) 
         { 
          String dbpass = rs.getString(1); 
          if(dbpass.equals(pass)){ 
           error.setText("Correct Username or Password"); 

         } 
         else 
         { 
          error.setText("Sorry!! Incorrect Username or Password"); 
         } 
         } 
       } 

        catch (SQLException e) { 
         username.setText(e.toString()); 
        } catch (ClassNotFoundException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 


     }); 
    } 
} 

如果正在运行的开发网站表示我的查询是:

   package com.example.login; 


import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import android.app.Activity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class LoginLayoutActivity extends Activity { 


    EditText username,password; 
    TextView error; 
    Button ok; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     username=(EditText)findViewById(R.id.et_un); 
     password=(EditText)findViewById(R.id.et_pw); 
     error=(TextView)findViewById(R.id.tv_error); 
     ok=(Button)findViewById(R.id.btn_login); 

     ok.setOnClickListener(new View.OnClickListener() { 



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

       Editable user = username.getText(); 
       Editable pass = password.getText(); 

       try { 

        **Class.forName("com.mysql.jdbc.Driver"); 

         Connection con = DriverManager.getConnection("jdbc:mysql://dev.xxxxx.com/xxx", "xxxx", "xxxx"); 
         Statement st = con.createStatement(); 


         ResultSet rs = st.executeQuery("SELECT password FROM customers where login='"+user+"'");** 

         if(rs.next()) 
         { 
          String dbpass = rs.getString(1); 
          if(dbpass.equals(pass)){ 
           error.setText("Correct Username or Password"); 

         } 
         else 
         { 
          error.setText("Sorry!! Incorrect Username or Password"); 
         } 
         } 
       } 

        catch (SQLException e) { 
         username.setText(e.toString()); 
        } catch (ClassNotFoundException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 


     }); 
    } 
} 

DIS开发网站的用户名,密码,数据库名称和网址都仅改变R是正确的。 ..为什么DIS错误发生....给我解决方案...

+1

可以ping到该主机?你能通过其他工具连接到MySQL吗? – 2012-02-18 13:09:14

+0

雅我平主机...然后只把...没有..在这里jdbc只用... – hariprasad 2012-02-18 13:28:48

+0

尝试连接使用其他工具,并尝试缩小问题搜索空间 – 2012-02-18 13:29:47

回答

0

听起来像一个网络问题。验证您是否可以从正在建立连接的设备访问数据库主机和端口,以及DBMS是否已启动并正在运行。

+0

dbms是什么意思... bez数据库主机和端口所有r只在我的连接正确... – hariprasad 2012-02-18 13:30:04

+0

“数据库管理系统”。如果你能ping通它,也许是一个DNS问题。你有没有尝试在你的JDBC URL中使用IP? – 2012-02-18 13:37:53

+0

你也检查...但没有用.. – hariprasad 2012-02-18 13:52:21

0

关键问题是当您尝试连接到数据库时移动设备是否在网络上。如果您在网络上,则需要与MySQL数据库管理员交谈,看看您是否有权访问该数据库。我猜你没有,因为你试图以root身份登录而没有密码。没有一位管理员的头脑会让你做到这一点。

如果您是管理员,请致电您的药剂师的治疗师。

如果移动设备不在网络上,我猜测数据库在某种防火墙后面。充其量,您必须与某位管理员交谈才能设置防火墙规则,以允许从移动设备进行访问。这些通常需要关于设备的一些信息。如果您打算为多个用户发布应用程序,防火墙规则将不实用。

更好的解决方案是设置一个代理来验证传入的移动设备并代表它们与数据库进行通信。

我不会有直接连接到数据库的移动设备,特别是您尝试去做的方式。

谁还知道你在做什么?它看起来像你试图连接到一个数据库,但这个事实并不广为人知。谁还知道你的项目?

1

如果您尝试从android应用程序连接到本地主机中的mysql,它可能无法获得通信,refer this

这个异常看起来像mysql没有公共访问。 使你的mysql在远程系统中可用,并给予远程系统的IP。让192.168.1.102成为它的ip,然后将此语句更改为jdbc:mysql://192.168.1.102:3306/people

您必须修改mysql配置文件。它可能是/etc/mysql/my.cnf(在Linux中)或\ xampp \ mysql \ bin \ my.ini(取决于mysql refer more)。 默认情况下,它包含bind-address = 127.0.0.1,将其更改为bind-address = 0.0.0.0。当做出这种改变时,那么mysql可以公开使用,即可以远程访问。现在你的应用程序可以访问这个mysql。

0

如果您使用en模拟器使用一个特殊的IP到您的本地主机。

10.0.2.2

jdbc:mysql://10.0.2.2:3306/people