viernes, 1 de febrero de 2013
No
hay mucha informacion sobre como hacer este tipo de conexion de forma rapida y
que funcione, si bien para java es muy sencillo y funciona a la primera para
poder realizar la conexion con el emulador y la aplicacion de android lleva
algunas variantes.
1. Lo primero es obtener el ojdbc14.jar ya sea el que se encuentra en la carpeta donde se encuentra instalado oracle en la ubicacion $ORACLE_HOME/jdbc/lib/ojdbc14.jar donde
oracle_home se encuentra generalmente
en /usr/lib/oracle..........
Dependiendo de la version asi sera el ojdbc que se necesite, este la version 5, la 6 dependiendo de la base de datos que tengan instalada por lo que lo primero es probar con estas librerias, sino funciona se pueden descargar desde la pagina de oracle:
Por
ejemplo yo use la version 10g xe de la base de datos y el ojdbc14 pero no me
funciono ninguno de los de la pagina ni los que tenia en la carpeta de oracle,
si llegan a tener el mismo problema pues la unica solucion que encontre es
utilizar el ojdbc que trae la version oracle mobile server, luego de
descargarla, la instale y busque el driver ojdbc14.jar y ese fue el que utilice
y me funciono.
2.
Una vez obtenido el bendito ojdbc.jar lo agregamos al proyecto como libreria
(agregarlo a la carpeta lib del proyecto android y luego agregar el jar al
proyecto).
Antes
de empezar con la parte de programar debemos agregar esta linea al manifest del
proyecto justo despues de el cierre del tag application
<uses-permission
android:name="android.permission.INTERNET" />
Porque
el no dar este permiso causa error al querer conectarse con una base de datos y
es de los errores mas comunes que se dan pero que son dificiles de identificar.
3. Ahora lo que necesitamos es una clase para conectarnos a la
base de datos, encontre una clase generica en Clase
Generica la cual me sirvio de base para la conexion y que es la que se
puede instancear desde cualquier activity de android, El codigo de la clase es:
4. Ya que tenemos la clase para conectarnos necesitamos un activity con el cual llamaremos a la clase generica y ya nos comunicaremos con la base de datos.
NOTA: Uno de los errores mas comunes es
colocar en el parametro ip, la ip de la maquina o 'localhost'
en este caso se usa la ip 10.0.2.2 que
funciona con el emulador.
Para mas informacion ir a: http://developer.android.com/tools/devices/emulator.html#networkaddresses
Con este activity al dar clic en el
boton nos mostrara que se ha conectado con exito a la base de datos.
y luego solo se llama desde el activity desde algun componente o al cargar el mismo activity, dependiendo de como lo necesiten o quieran pasandole los parametros asignados desde algun edittext u otro componente:
Espero sea de ayuda este pequeno post
sobre la conexion de android con oracle y sirva como base para realizar algun
proyecto a partir de tener la conexion lista.
En el siguiente link pueden descargar
el ejemplo realizado en android adt bundle version para linux.
APP
Suscribirse a:
Enviar comentarios (Atom)
Search
Categories
android
(2)
Animacion 3D
(3)
aspx
(4)
bases de datos
(7)
Blender
(3)
C
(1)
C#
(4)
cisco
(1)
Compiladores
(11)
conceptos
(1)
cup
(2)
DB2
(2)
gns3
(5)
Irony
(3)
Java
(3)
kvm
(1)
linux
(5)
manual express latex
(1)
MongoDB
(1)
ocio
(3)
oracle
(3)
poo
(1)
Postgresql
(4)
programacion
(9)
Redes
(7)
resumen
(1)
soluciones
(1)
SQL
(16)
sqlserver
(1)
teoría
(5)
Ubuntu
(9)
Uwintu
(1)
VB
(1)
windows
(2)
Statistics
Con la tecnología de Blogger.
Cuándo pasas la aplicación al smarth-phone si te corre bien,yo lo hice pero la aplicación se traba y se cierra.
ResponderEliminarLe cambiaste ip??? al correr la app desde el telefono tendrias que estar conectado a la misma red y donde haces la conexion
EliminarConexion conn = new Conexion("10.0.2.2"...... ya no seria la 10.0.2.2 sino la de la maquina o servidor donde estas corriendo oracle por ejemplo la 192.168.1.4 o algo asi.
Asi es la IP está cambiada, también le quite la linea de .penaltyDialog() , de lo contario me sale un error en el emulador Violated its self-enforced StrickMode policy. Por eso mi pregunta si te corre bien el app en el smart-phone, baje tu código pero me sale un error pero no se de que sea no marca errores en lineas de código.
ResponderEliminarEl problema te da en el emulador entonces? pues no se que version estas usando pero no tendria que dar problema y la probaste en telefono?? yo probe en el celular y para que corra solo es de quitarle las lineas
EliminarStrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitNetwork().build();
StrictMode.setThreadPolicy(policy);
y en ip le puse la de mi maquina donde esta oracle 192.168.1.3 y conecte el telefono al router para que esten en la misma red y si funciona.
el problema lo tengo en el móvil, me marca error java.sql.SQLException: Io exception: The Network Adapter could not establish the connection,
Eliminarpero el ioexception es porque estas haciendo una inserción y no se esta realizando correctamente, si te funciono en el emulador no te tiene que dar problema en el movil en todo caso revisa este link estan las causas mas comunes de este error
Eliminarhttp://stackoverflow.com/questions/7324125/oracle-io-exception-the-network-adapter-could-not-establish-the-connection
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola fijate que me parece muy practico tu informacion, gracias! pero queria saber si podrias asesorarme de como conectarme a un webservice que tengo en xml y este a su ves tiene una base de datos oracle
ResponderEliminarSaludos
Es necesario un cliente de Base de datos en el equipo movil?
ResponderEliminarMe funciona en el emulador pero no en el equipo movil.
No encuentro las librerías, los link están caídos, me pueden ayudar un poco ?
ResponderEliminarLos enlaces de oracle ya no estan disponibles pero si descargas la aplicacion ahi dentro va la libreria ojdbc14 que sirve para conectarse a la BD.
EliminarPoca gente agradece en este tipo de publicaciones. Pero tu còdigo funcionó sin ningún problema. Gracias por dedicartiempo a compartir el conocimiento. Saludos. Fue de gran ayuda en la universidad.
ResponderEliminarque android me recomiendan? mi idea es comprar uno nuevo en este buen fin
ResponderEliminaren el siguiente codigo no espesificas que tipo de variable es stmt
ResponderEliminarpublic void insert_goal(String codigo, String nombre, String desc) {
int valorgoal = 0;
try {
stmt = conexion
.prepareStatement("INSERT INTO goal VALUES (?,?,?,?)");
stmt.setString(1, codigo);
stmt.setString(2, nombre);
stmt.setString(3, desc);
stmt.setInt(4, valorgoal);
int retorno = stmt.executeUpdate();
System.out.println(retorno);
} catch (SQLException sqle) {
System.out.println("SQLState: " + sqle.getSQLState());
System.out.println("SQLErrorCode: " + sqle.getErrorCode());
sqle.printStackTrace();
}
}
corregido seria asi
------------------------------------------------------------------
public Statement stmt = null;
public void insert_goal() {
int valorgoal = 0;
try {
stmt = conexion.createStatement();
String sql = "INSERT INTO ALUMNOS " +
"VALUES (25, 'Maria', 'Ali')";
stmt.executeUpdate(sql);
System.out.println("insercion exitosa");
} catch (SQLException sqle) {
System.out.println("SQLState: " + sqle.getSQLState());
System.out.println("SQLErrorCode: " + sqle.getErrorCode());
sqle.printStackTrace();
}
}
No es Statement el tipo, es PreparedStatement
Eliminar