Error al conectar Android con MySql JDBC

X

Hola mi problema es que intento conectar mi app de Android a una base de datos MySql. Desde PHP puedo sin problemas
Os paso el código.
Ya se que sobran variables que no se utilizan, pero eran pruebas.
El error que lanza es:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    Context cont = this;
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.activity_main);
    sqlThread.start();
}
Thread sqlThread = new Thread() {
    public void run() {

        Connection conn = null;
        String driver = "com.mysql.jdbc.Driver";
        String url = "eu-mm-auto-dub-01-a.cleardb.com";
        String dbname = "heroku_3562ea8f595a5dc";
        String username = "b93368809d1436";
        String pass = "contraseña";

        try {
            Class.forName("com.mysql.jdbc.Driver");
            //ERROR................................
            conn = DriverManager.getConnection("jdbc:mysql://eu-mm-auto-dub-01-a.cleardb.com:3306/heroku_3562ea8f595a5dc", "b93368809d1436", "contraseña");
            Toast.makeText(getApplicationContext(),
                   "consulta",
                    Toast.LENGTH_SHORT).show();

            String cons = "SELECT nombre FROM tequipos";

            PreparedStatement mail = conn.prepareStatement(cons);


            java.sql.ResultSet res = mail.executeQuery(cons);

            while (res.next()) {
                String empresa = res.getString(1);
                View linearLayout = findViewById(R.id.contentMarcadores);
                TextView valueTV = new TextView(getApplicationContext());
                valueTV.setText(empresa);
                valueTV.setLayoutParams(new ViewGroup.LayoutParams(
                        ViewGroup.LayoutParams.WRAP_CONTENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT));

                ((LinearLayout) linearLayout).addView(valueTV);
            }
        } catch (SQLException e) {
            Toast.makeText(getApplicationContext(),
            "Error SQL: " + e.getMessage(),
             Toast.LENGTH_SHORT).show();

       }
      catch (Exception e) {
          Toast.makeText(getApplicationContext(),
                  "Error 2: " + e.getMessage(),
                  Toast.LENGTH_SHORT).show();
        }
    }
   };
JuAn4k4

Imagino que lo que te ocurre es que la BD en Heroku tiene un firewall que no permite conectarte desde fuera de ciertos sitios permitidos.

Una solución más viable sería:
Desde Android, llamar a una API de un servidor tuyo alojado en Heroku, con permisos en el firewall para acceder a la BD (Mira security groups y tal).

Desde el móvil no vas a poder a no ser que permitas a todo el mundo acceder.

1 respuesta
KoRMuZ

Yo estoy con #2. Creas una api en el servidor, que te devuelva los datos en json, con permisos para tu aplicación, y te quitas de lios de conectar a una base de datos desde fuera del servidor.

PD: No tengo mucha idea de android, pero si el error que dices es ese, fallo de conexión, tiene mucha pinta de ser lo que te han dicho arriba

SikorZ

Tienes que activar conexiones remotas en mysql

1 respuesta
X

#4 Desde Heroku?

1 respuesta
SikorZ

#5 aho ya me has pillado.. Yo se que mysql por defecto bloquea conexiones desde fuera... El Heroku este no se ni que ed