Android - Error al conectar Android con MySQL usando cualquier driver

 
Vista:

Error al conectar Android con MySQL usando cualquier driver

Publicado por Paco Serrador (1 intervención) el 04/06/2018 16:43:23
Buenos días y gracias por la atención por adelantado.
Llevo un par de meses encontrándome un problema al realizar una app con Android Studio que debería conectar a una base de datos en MySQL. Sea lo que sea lo que haga la app y el contenido de la BD, cuando inicia la conexión da un error fatal y se cierra.

He hecho la misma aplicación en Java, tanto en Eclipse como en NetBeans, y conecta perfectamente, edita, consulta, actualiza todo correctamente, pero traslado la aplicación a Android Studio y no hay forma.

Incluso he copiado y pegado, literalmente, aplicaciones que he encontrado en webs y blogs de consulta y me ocurre exactamente lo mismo. El error que aparece en la consola es
1
java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference

¿Es posible que haya algo más que revisar?

Adjunto el texto de la app más sencilla que ha resultado de eliminar lo que no sea mera conexión

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package com.example.paco.myapplication;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.lang.String;
 
public class MainActivity extends AppCompatActivity {
    private static Connection conexion = null;
    private static String bd = "airesa"; // Nombre de BD.
    private static String user = "root"; // Usuario de BD.
    private static String password = "mysql"; // Password de BD.
    private static String cadena;
    public Button conectar;
    private static ResultSet rs;
    private static Statement st;
    // Driver para MySQL en este caso.
    private static String driver = "com.mysql.jdbc.Driver";
    // Ruta del servidor.
    private static String url = "jdbc:mysql://192.168.1.16/" + bd;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        conectar = (Button) findViewById(R.id.button);
        conectar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                try {
                    conectar();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                Statement st = null;
                try {
                    st = conexion();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                //Instrucción de SQL que actualiza datos en la tabla.
                cadena = "Insert into plasticos (tipoplastico, tipodiseno) values ('PET', 'android');";
                try {
                    consultaActualiza(st, cadena);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                try {
                    cerrarrs(rs);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                try {
                    cerrarst(st);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
 
 
    private void conectar() throws SQLException {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
 
        try {
            conexion = DriverManager.getConnection(url, user, password);
 
        } catch (Exception ex) {
            System.out.print("Error de conexión" + ex);
 
        }
    }
 
    private Statement conexion() throws SQLException{
        Statement st = null;
        try {
            st = conexion.createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
 
        }
        return st;
    }
 
    /**
     * Método para realizar consultas de actualización, creación o eliminación.
     *
     * @param st
     * @param cadena La consulta en concreto
     * @return
     */
    private int consultaActualiza(Statement st, String cadena)throws SQLException {
        int rs = -1;
        try {
            rs = st.executeUpdate(cadena);
        } catch (SQLException e) {
            e.printStackTrace();
 
        }
        return rs;
    }
    /**
     * Método para cerrar la consula
     *
     * @param rs
     */
    public void cerrarrs(ResultSet rs) throws SQLException{
        if (rs != null) {
            try {
                rs.close();
            } catch (Exception e) {
                e.printStackTrace();
 
            }
        }
    }
 
    /**
     * Método para cerrar la conexión.
     *
     * @param st
     */
    public void cerrarst(java.sql.Statement st) throws SQLException {
        if (st != null) {
            try {
                st.close();
            } catch (Exception e) {
                e.printStackTrace();
 
            }
        }
    }
 
 
});}}

Esta era la MainActivity.java.

En el AndroidManifest.xml ya he verificado que estuviera la línea
1
<uses-permission android:name="android.permission.INTERNET" />
y el driver JDBC que utilizo es el mysql-connector-java-5.1.45-bin, aunque me ocurre exactamente lo mismo con cualquier otra versión del driver que utilizo, y en el Eclipse y el NetBeans funciona perfectamente con todas ellas.

Gracias de antemano, de nuevo.

PD
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 112
Bronce
Ha disminuido 1 puesto en Android (en relación al último mes)
Gráfica de Android

Error al conectar Android con MySQL usando cualquier driver

Publicado por Yamil Bracho (100 intervenciones) el 04/06/2018 16:48:58
Lo mejor es que hagas un servicio que acceda a la BD y que el serviciosea consumido por los dispositivos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar