Utilizar PostgreSQL en Android con JDBC

| 2013-06-15 | 9 Comentarios »

postgresqlEn mi universidad el profesor de «Sistemas Operativos I» nos dio un trabajo práctico que en cierta medida consiste en utilizar PostgreSQL desde Android. Al intentar realizar las primeras pruebas me he dado cuenta que ni siquiera me reconocía el jdbc de postgresql y por lo tanto no podía hacer ni una consulta porque la aplicación android crasheaba de forma instantánea y tiraba una gran cantidad de errores en el LogCat.

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.

pgandroid1

– 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):

pgandroid2

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.

Acerca del autor: Rodrigo Paszniuk

Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.

Posts Relacionados

  • Crear múltiples productFlavors con Android Studio
  • Gson: Librería para parsear JSON en Android
  • Butter Knife: librería para inyectar vistas en Android
  • HTTPS y SSL en Android



SEGUÍNOS EN FACEBOOK


GITHUB