ошибка соединения с сокетом jdbc - PullRequest
2 голосов
/ 18 февраля 2012

я успешно завершил форму входа в Android с помощью подключения MySQL через JDBC в Java ... его успешно работает на моем локальном хосте ... но сайт разработки не работает ... следующая ошибка не отображается.

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)

почему возникла ошибка. Дайте мне несколько решений. если я использую localhost, значит, мой 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();
                    }
                }


        });
    }
}

имя пользователя, пароль, имя базы данных и URL-адрес сайта разработки только правильно ... тогда почему возникает ошибка dis .... дайте мне решения ...

Ответы [ 4 ]

1 голос
/ 03 февраля 2013

Если вы пытаетесь подключить свой mysql к localhost из приложения для Android, он может не получить связь, см. Это .

Это исключение похоже на то, что 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 см. Подробнее ). По умолчанию он содержит bind-address = 127.0.0.1, измените его на bind-address = 0.0.0.0. Когда это изменение сделано, то MySQL доступен публично, то есть к нему можно получить удаленный доступ. Теперь ваше приложение может получить доступ к этому mysql.

0 голосов
/ 07 декабря 2016

Если вы используете en emulator, используйте специальный IP-адрес для вашего локального хоста.

10.0.2.2

jdbc:mysql://10.0.2.2:3306/people

0 голосов
/ 18 февраля 2012

Ключевой вопрос заключается в том, находится ли мобильное устройство в сети, когда вы пытаетесь подключиться к базе данных. Если вы находитесь в сети, вам нужно поговорить с администратором базы данных MySQL, чтобы узнать, есть ли у вас разрешение на доступ к этой базе данных. Я предполагаю, что вы этого не делаете, потому что вы пытаетесь войти в систему как root без пароля. Ни один администратор в здравом уме не позволит вам сделать это.

Если вы администратор, позвоните своему фармацевту.

Если мобильное устройство отсутствует в сети, я предполагаю, что база данных находится за каким-то брандмауэром. В лучшем случае вам нужно поговорить с каким-нибудь администратором, чтобы настроить правила брандмауэра, чтобы разрешить доступ с мобильного устройства. Те обычно требуют некоторой информации об устройстве. Правила брандмауэра не будут практичными, если вы собираетесь выпустить приложение для нескольких пользователей.

Лучшим решением было бы установить прокси, который будет аутентифицировать входящие мобильные устройства и связываться с базой данных от их имени.

У меня не было бы мобильного устройства, подключающегося напрямую к базе данных, особенно того, как вы пытаетесь это сделать.

Кто еще знает о том, что вы пытаетесь сделать? Мне кажется, что вы пытаетесь подключиться к базе данных, но этот факт широко не известен. Кто еще знает о вашем проекте?

0 голосов
/ 18 февраля 2012

Звучит как проблема с сетью.Убедитесь, что вы можете получить доступ к хосту и порту базы данных с устройства, с которым вы устанавливаете соединение, и работает ли СУБД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...