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.