Vamos a ver y obtener información de una base de datos MySQL mediante RDC.
No se utiliza PHP.
Para probarlo vamos a realizarlo en forma local, en nuestro ordenador. (Se puede hacer en servidor remoto.)
Para empezar debemos tener instalado un servidor web y mysql mediante el paquete WAMP.
Lo instalamos en c:\wamp
_______________________________________________________________________
1.- Vamos a bajar el RDC-server.zip (RDC es un servidor web basado en java) de...
http://www.b4x.com/android/forum/threads/remote-database-connector-files.31541/
Lo descomprimimos, en mi caso lo descomprimo en... C:\Android\RDC\RDC-Server
Localizo la carpeta de configuración en... C:\Android\RDC\RDC-Server\RemoteDatabaseConnector, ahí están los archivos de configuración.
- RDC es un servidor web en java. Lo podemos copiar en una carpeta de Windows o de LINUX. Para poder trabajar en un servidor a distancia lo podemos realizar controlándolo desde telnet o ssh. Arrancarlo desde ssh.
Este servidor necesita unos controles, driver, según el tipo de base de datos que quiera controlar.
Si creas este servidor y lo arrancas puedes comprobar que funciona escribiendo esto en un navegador...
http://192.168.1.3:17178/
(con tu IP) Simplemente saldrá una página en blanco sin errores.
- Se puede sustituir este servidor web con otro creado mediante B4J.
2.- Bajamos el Controlador java que relaciona al MySQL con el servidor. Para ello vamos a...
http://dev.mysql.com/downloads/connector/j/
Ponemos el desplegable en Platform Independent y bajamos el mysql-connector-java-5.1.34.zip
(Para bajarlo es necesario realizar un registro gratuito)
Descomprimimos el archivo bajado y copiamos... mysql-connector-java-5.1.34-bin.jar en
C:\Android\RDC\RDC-Server\RemoteDatabaseConnector\jdbc_driver
Según sea el tipo de base de datos utilizada el archivo del controlador será distinto, en nuestro caso lo estamos haciendo con MySQL.
Si quisieramos hacerlo con SQL Server bajaríamos: http://jtds.sourceforge.net/
Y para SQLite lo haríamos con: https://bitbucket.org/xerial/sqlite-jdbc/downloads
Para Oracle consultamos: https://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html
3.- Vamos a realizar la configuración. Editamos (Botón derecho / Editar) el archivo...
C:\Android\RDC\RDC-Server\RemoteDatabaseConnector\RunRLC.bat
Debemos poner la dirección donde se encuentra nuestro JAVA, podemos verlo si entramos en B4A, Tools / Configure paths, pero CUIDADO, ahí encontramos javac.exe y nosotros pondremos simplemente la palabra java.
RunRLC.bat |
"C:\Program Files (x86)\Java\jdk1.6.0_26\bin\java" -Xmx256m -cp .;libs\*;jdbc_driver\* anywheresoftware.b4a.remotedatabase.RemoteServer pause |
4.- Cambiamos el archivo del Driver
C:\Android\RDC\RDC-Server\RemoteDatabaseConnector\config.properties
Vamos a realizarlo con un ejemplo:
RunRLC.bat |
#Lines starting with '#' are comments.
#Backslash character at the end of line means that the command continues in the next line.
DriverClass=com.mysql.jdbc.Driver
JdbcUrl=jdbc:mysql://localhost/basedatosempresa?characterEncoding=utf8
#SQL Server
#DriverClass=net.sourceforge.jtds.jdbc.Driver
#JdbcUrl=jdbc:jtds:sqlserver:///
User=root
Password=1234
ServerPort=17178
#If Debug is true then this file will be reloaded on every query.
#This is useful if you need to modify the queries.
Debug=true
#commands # Aquí ponemos los comandos completos que queremos utilizar
sql.crear_tabla=CREATE TABLE personas (\
id INT NOT NULL AUTO_INCREMENT,\
nombre CHAR(30) NOT NULL,\
edad CHAR(2) NOT NULL,\
PRIMARY KEY (id))
sql.inserta_nombreyedad=INSERT INTO personas VALUES (null, ?,?)
sql.selecciona_nombreyedad=SELECT nombre, edad FROM personas WHERE nombre = ? sql.selecciona_mayor=SELECT nombre FROM personas WHERE edad > ?
|
- Anteriormente con http:\\localhost\myphpadmin creamos una base de datos llamada basedatosempresa. Vamos a Privilegios y le añadimos al usuario root con contraseña 1234
- La tabla llamada personas con dos campos: nombre y edad, se creará con el código de Basic4Android, no la creamos ahora.
- Podremos insertar nombre y edad
- Podremos seleccionar nombre y edad de un nombre.
- Podremos seleccionar mayores según la edad.
En este archivo se configura lo que podría realizar la llamada al servidor.
Establecemos un usuario y su clave. Utilizaremos el puerto 17178
En commands ponemos los comandos que utilizaremos, es decir los comandos necesarios deben estar en este archivo.
En el código de Basic4Android llamaremos al comando adecuado.
5.- Vamos a arrancar el Servidor. Pulsamos con el ratón sobre el archivo...
C:\Android\RDC\RDC-Server\RemoteDatabaseConnector\RunRLC.bat
nos sale esta pantalla. Si nos indica STARTING, significa que el servidor está arrancado y funcionando.
- Arrancamos previamente el servidor WAMP, que se supone tenemos instalado.
Vamos a comprobar si funciona con nuestra base de datos, en un navegador escribimos
http://127.0.0.1:17178/?method=test
Si obtenemos una Connection successful es que está funcionando.
NOTA: para hacer pruebas deshabilita momentáneamente el Firewall de Windows. Más tarde cuando ya funcione habilita solamente el puerto 17178.
__________________________________________
- Código en nuestro programa de B4A.
5.- Vamos al código de Basic4Android, creamos un nuevo proyecto, lo he llamado RDC, y dentro de él una nueva Clase: Add New Module / Class Module, lo llamamos DBRequestManager.
El contenido de esta Clase, lo debemos de bajar de la web de B4A, ya que se necesita estar registrado para bajarlo, aunque lo podemos encontrar en el tutorial español del mismo sitio. Está en varios partes de los foros.
6.- Vamos a la parte Main de nuestro código.
Activamos las librerías: ByteConverter, HttpUtils2 y RandomAccessFiles
Antes mediante el Designer creamos un Layout llamado "insertrdc" con dos EditText y cuatro botones.
Luego pegamos este código...
Importante: escribe la IP de tu ordenador local, no escribas localhost ni 127.0.0.1 en el RegManager.Initialize.
Main del Basic4Android |
Sub Process_Globals
Dim RegManager As DBRequestManager
End Sub
Sub Globals
Dim EditText1, EditText2 As EditText
Dim nombre, edad As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
RegManager.Initialize(Me,"http://192.168.1.3:17178")
Activity.LoadLayout("insertrdc")
End If
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause
End Sub
Sub JobDone(Job As HttpJob)
If Job.Success = False Then
Log("Error: " & Job.ErrorMessage)
Else
If Job.JobName = "DBRequest" Then
Dim result As DBResult = RegManager.HandleJob(Job)
RegManager.PrintTable(result)
'Log(result.Tag)
End If
End If
Job.Release
End Sub
Sub Button1_Click
' CREAR TABLA
Dim cmd As DBCommand
cmd.Initialize
cmd.Name="crear_tabla"
RegManager.ExecuteCommand(cmd, 0)
End Sub
Sub Button2_Click
' INSERTAR
nombre = EditText1.Text
edad = EditText2.Text
Dim cmd As DBCommand
cmd.Initialize
cmd.Name="inserta_nombreyedad"
cmd.Parameters= Array As Object(nombre, edad)
RegManager.ExecuteCommand(cmd, 0)
End Sub
Sub Button3_Click
' CONSULTAR
nombre = EditText1.Text
Dim cmd As DBCommand
cmd.Initialize
cmd.Name="selecciona_nombreyedad"
cmd.Parameters= Array As Object(nombre)
RegManager.ExecuteQuery(cmd, 0, nombre)
End Sub
Sub Button4_Click
' MAYOR
edad = EditText2.Text
Dim cmd As DBCommand
cmd.Initialize
cmd.Name="selecciona_mayor"
cmd.Parameters= Array As Object(edad)
RegManager.ExecuteQuery(cmd, 0, edad)
End Sub
|
- Si no lo hemos hecho, antes de hacerlo funcionar vamos a http:\\localhost\myphpadmin
y creamos una nueva base de datos llamada basedatosempresa (Le ponemos de Cotejamiento utf2 spanish)
En esa base de datos vamos a Privilegios y añadimos al usuario: root y le ponemos de contraseña: 1234.
_________________
- Comentarios.
- Primero pulsamos el primer botón, el de Crear Tabla.
Volvemos a entrar en http:\\localhost\myphpadmin y observaremos que se ha creado la tabla personas, esto lo realiza la parte de #command del archivo RunRLC.bat
- Luego escribimos un nombre y una edad en los casilleros, pulsamos el botón de Insertar, volvemos a http:\\localhost\myphpadmin y observamos que se ha añadido ese nombre y esa edad.
- Después escribimos un nombre de usuario que ya esté guardado en el EditText1 y pulsamos el tercer botón, el de Consultar, nos saldrá la edad de ese usuario.
- Después escribimos en EditText2 una edad y pulsamos el Botón4, en el log, aparecerá las personas mayores de esa edad.
El resultado de la consulta se obtien en la Subrutina JobDone, mediante la variable result.
__________________________________
- RDC y SQLite.
En los tutoriales se encuentra cómo hacerlo con SQLite. Necesitarás el driver para SQLite https://bitbucket.org/xerial/sqlite-jdbc/downloads
Configurar el archivo...
DriverClass=org.sqlite.JDBC
JdbcUrl=jdbc:sqlite:C:/carpeta/mibasededatos.db
SQLite no admite peticiones a la vez, hay que configurarlo para que cuando llegue una petición y otra esté en proceso, la anterior espere.
Para ello ponemos
c3p0.minPoolSize= 1
c3p0.maxPoolSize= 1
________________________________