Luego de probar y probar tengo la solución a todos los problemas que me iban surgiendo, por ese motivo decidí crear este artículo.
IDE utilizado: Eclipse + ADT.
Les dejo el proyecto completo para que lo puedan descargar si es que lo desean: PostgresAndroid.
– Lo primero que se debe de hacer es agregar el jdbc de postgresql (.jar) al proyecto android deseado en la carpeta «libs», posteriormente se debe hacer click derecho al proyecto y luego click izquierdo a la opción Refresh.
– Luego abrir desde el eclipse el archivo MainActivity.java que se encuentra en la carpeta src y dejarlo de esta manera:
/* * Utilizar PostgreSQL en Android con JDBC * www.programacion.com.py - Recursos y documentación para desarrolladores - By Rodrigo Paszniuk * PD: Para agregar una libreria .jar cualquiera al proyecto solamente se debe agregar a la carpeta libs del mismo. * Para actualizar cambios hacer click derecho al proyecto y luego click izquierdo a Refresh. */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Desde la version 3 de android, no se permite abrir una conexión de red desde el thread principal. //Por lo tanto se debe crear uno nuevo. sqlThread.start(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } Thread sqlThread = new Thread() { public void run() { try { Class.forName("org.postgresql.Driver"); // "jdbc:postgresql://IP:PUERTO/DB", "USER", "PASSWORD"); // Si estás utilizando el emulador de android y tenes el PostgreSQL en tu misma PC no utilizar 127.0.0.1 o localhost como IP, utilizar 10.0.2.2 Connection conn = DriverManager.getConnection( "jdbc:postgresql://192.168.0.4:5432/fifa", "test", "test"); //En el stsql se puede agregar cualquier consulta SQL deseada. String stsql = "Select version()"; Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(stsql); rs.next(); System.out.println( rs.getString(1) ); conn.close(); } catch (SQLException se) { System.out.println("oops! No se puede conectar. Error: " + se.toString()); } catch (ClassNotFoundException e) { System.out.println("oops! No se encuentra la clase. Error: " + e.getMessage()); } } }; }
– Posteriormente se debe de agregar el permiso para poder acceder a una base de datos remota, para eso se debe de dejar el AndroidManifest.xml así:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.postgresandroid" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.postgresandroid.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.INTERNET" /> </manifest>
– Con eso ya tendrían que tener la conexión a PostgreSQL 100% funcional, screen de muestra (se puede observar que muestra la versión de mi PostgreSQL en el LogCat):
Notas:
– Los parámetros que deben de modificar para que se conecten a su DB PostgreSQL (IP, puerto, DB, usuario y contraseña) en el archivo MainActivity.java son los siguientes:
- Esto es un ejemplo que lo pueden utilizar como referencia: "jdbc:postgresql://192.168.0.4:5432/fifa", "test", "test"); - Si estás utilizando el emulador de android y tenes el PostgreSQL en tu misma PC no utilizar 127.0.0.1 o localhost como IP, utilizar 10.0.2.2
– El PostgreSQL por defecto solo permite conexiones del equipo local, si desean que acepte conexiones de cualquier otro IP deben de irse al directorio donde instalaron su postgresql y modificar el archivo pg_hba.conf de esta forma (cuando hagan los cambios deben de reiniciar su postgresql):
# TYPE DATABASE USER ADDRESS METHOD # IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 0.0.0.0/0 md5 host all all 0.0.0.0 0.0.0.0 md5 # IPv6 local connections: #host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. #host replication postgres 127.0.0.1/32 md5 #host replication postgres ::1/128 md5
Espero les sea de utilidad este artículo.