Consulta a una Base de Datos

7 views
Skip to first unread message

jmrocamora

unread,
Jul 28, 2011, 4:55:09 AM7/28/11
to ios-spa
Saludos. Despues de buscar información sobre web service, veo que no
termino de encontrar algo como lo que quiero, que es acceder a una
base de datos desde una aplicación y mostrar en distintos campos el
resultado del select.
Por ejemplo, si realizo (SELECT * FROM producto WHERE categoria=ocio)
con el resultado, si son 5 tuplas, me gustaria mostrar una por
"pagina" o "vista", separando cada campo de la tupla en un campo
definido en la aplicación, una para el campo "info" otro para
"referencia" otro para "imagen", etc... tengo los campos puestos en
una vista de la aplicación, pero no termino de saber que metodos usar
para hacer la petición a la bbdd, como mostrar cada resultado en una
vista, etc. ¿Alguno podria decirme que funciones podria mirar? o ¿por
donde puedo empezar a buscar en la documentación?

¡Muchas gracias por todo!

Javier Campos

unread,
Jul 28, 2011, 4:59:00 AM7/28/11
to ios...@googlegroups.com
Esta parte tambien me interesa a mi, si alguien ayuda se agradece.


-----Mensaje original-----
De: ios...@googlegroups.com [mailto:ios...@googlegroups.com] En nombre de
jmrocamora
Enviado el: jueves, 28 de julio de 2011 10:55
Para: ios-spa
Asunto: Consulta a una Base de Datos

Oscar Pedrero Feliciano

unread,
Jul 28, 2011, 5:07:57 AM7/28/11
to ios...@googlegroups.com
Puedes generar webservices en PHP que generen el resutado y lo pasas en un xml, despues recoges el xml en la app lo parseas y a correr!

Si quieres acceder directamente a la BD Mysql busca info sobre libmysql ( creo recordar que se llamaba asi )

Un saludo

Jesús Mazcuñán

unread,
Jul 28, 2011, 5:23:55 AM7/28/11
to ios...@googlegroups.com
Tienes varias opciones.

1) Si tienes conexión con Internet (asumimos, dado que buscas un web service)

- Como dice Pedro, montas un archivo PHP que se encargue de gestionar las búsquedas en la base de datos y devolverte los resultados. Dependiendo de lo complicada que quieras que sea la app de iOS le metes la gestión de los resultados al iOS o al PHP.

Por ejemplo. Tu botón de siguiente simplemente manda una consulta SQL con un offset para el producto que toque. Las peticiones a una URL las puedes hacer con GET o con POST. Hay un capítulo muy interesante sobre esto en "More iPhone 3 Programming" (apress) (El "More iPhone and iPad 4 programming" creo que aún no ha salido...). No recuerdo ahora si es con NSURLRequest o con otra cosa.

- La consulta PHP puede devolverte múltiples formatos: formato propio definido por ti, xml, property list, json... Yo te recomendaría trabajar con property lists porque son XML que se convierten en estructuras de datos (objetos) de manera directa. Sobre todo si son datos lo que gestionas (define las URLs de las imágenes y que las carguen los UIImage en lugar de mandarte los datos binarios en el XML...).

- Si te aburres, trastea con una librería de SQL que te permita conectarte a un servicio y consultar directamente... pero probablemente la encuentres en C y tengas que convertir cadenas de Objective-C a C y viceversa.

- Si te aburres mucho... tira un socket de UNIX contra el servidor SQL y sigue el protocolo correspondiente.

2) Si no tienes conexión a internet.

- Utiliza SQLite (Ansi C) para la gestión de la base de datos de productos en local. Puedes tener un botón que compruebe si hay cambios en la base de datos "online" y la actualice.

- Utiliza Core Data.



A ver si cuando tenga un momento hago una demo que consuma recursos de un web service PHP con MySQL. Pero no prometo nada... :D

Octavio Chango

unread,
Jul 28, 2011, 6:06:17 AM7/28/11
to ios...@googlegroups.com
Hola,
 
Para contribuir un poco con el grupo a ver si anima..
 
Lo que dice Jesús de montar un PHP es lo mas fácil y rápido, claro por cuestiones de seguridad no recomiendo enviar las consultas SQL directo al PHP, si no, que este PHP tenga varias métodos, y ya sea por post o get (el primero preferible) le envíes los datos y este te responda en el formato que mas te guste... Y siguiendo con lo de la seguridad este PHP debería manejar algún tipo de autentificación (preferiblemente por usuario con cada uno de estos sus respectivos permisos) y si es posible que sea accesible solo por HTTPS...
 
Y si no te interesa la seguridad, y solo quieres hacer pruebas o construir tu propia librería, tal cual dice Jesús, un socket directo al servidor SQL y a disfrutar!
 
Saludos,
Octavio Chango

jmrocamora

unread,
Jul 28, 2011, 6:32:05 AM7/28/11
to ios-spa
En principio si dispondría de conexión, ya que en el caso que estoy
trabajando es una bbdd muy pequeña, con muy pocos resultados, pero por
que se trata de un PFC, pero le veo mas uso el que trabaje con
conexión, ya que si la bbdd se actualizase, tendrías que estar
actualizando la aplicación.. creo, ¿no?.

Bueno, después de ver todas las propuestas, intentare trabajar con el
archivo PHP ya que yo también creo que es lo que mas fácil voy a poder
montar.
Con respecto al tema de la seguridad, si me interesa y mucho, ya que
después de ver todo lo deseado, el usuario (en un principio) estaría
bien que tuviese la posibilidad de añadir a un carrito los objetos
seleccionados para una posible compra, pero vamos, paso a paso,
intentare ir montando poco a poco lo que pueda y según vea el asunto,
preguntare y modificare sobre la marcha...

Saludos y gracias a todos por sus respuestas!!

Jesús Mazcuñán

unread,
Jul 28, 2011, 12:55:35 PM7/28/11
to ios...@googlegroups.com
2011/7/28 jmrocamora <jmroc...@gmail.com>

En principio si dispondría de conexión, ya que en el caso que estoy
trabajando es una bbdd muy pequeña, con muy pocos resultados, pero por
que se trata de un PFC, pero le veo mas uso el que trabaje con
conexión, ya que si la bbdd se actualizase, tendrías que estar
actualizando la aplicación.. creo, ¿no?.


No necesariamente. Simplemente comprueba si en la carpeta de documentos está el archivo de la base de datos y si está, lo usas. Si no está, usas el que viene con la app.

Compruebas con una consulta si la aplicación está actualizada (le preguntas a la base de datos y al servidor e datos). Y si hay una versión nueva, sobreescribes la de documentos. 

 
Bueno, después de ver todas las propuestas, intentare trabajar con el
archivo PHP ya que yo también creo que es lo que mas fácil voy a poder
montar.


La pega del PHP es que si haces una app para distribuir, necesitas un servidor que soporte la carga de los posibles usuarios.



Con respecto al tema de la seguridad, si me interesa y mucho, ya que
después de ver todo lo deseado, el usuario (en un principio) estaría
bien que tuviese la posibilidad de añadir a un carrito los objetos
seleccionados para una posible compra, pero vamos, paso a paso,
intentare ir montando poco a poco lo que pueda y según vea el asunto,
preguntare y modificare sobre la marcha...


Puedes gestionar la compra en local y luego mandar un archivo encriptado. O conectar por HTTPS para enviar el pedido.

 
Saludos y gracias a todos por sus respuestas!!


De nada. Ya era hora de que tuviéramos marcha por estos lares... :D


--
"Tengo artículos prohibidos de lugares
en los que el hombre no osa aventurarse.
También tengo yogur helado,
al que llamo Yogurlado."

http://www.mazcunan.net/

Jesús Mazcuñán

unread,
Oct 9, 2011, 2:58:09 PM10/9/11
to ios...@googlegroups.com
Alguien se ha equivocado de botón... :D
-----
Buenas! Tengo ya la página web funcionando pero sigo teniendo
problemas con la conexión de la aplicación a la base de datos.
Esto es lo que tengo en la página web:
---------------------------PARTES DE LA PAGINA
WEB------------------------
</head>
<body>
       <%
          Set Conexion = Server.CreateObject("ADODB.Connection")
          Conexion.ConnectionString = "Data Source=nombre_base_datos;
USER=SYSDBA; PASSWORD=xxxxxxxxxx"
          Conexion.Mode = 3
          Conexion.Open

          SentenciaSQL = "select * from produtos"
          Set rs = Conexion.Execute(SentenciaSQL)
          Set rs2 = Conexion.Execute(SentenciaSQL)
       %>
       <div id="all">
               <div id="contenedor">
                   ...
       <h2>Seleccione el tipo de producto o las ofertas para empezar la
búsqueda, o dejelo con "TODOS" para ver todos los productos y
ofertas.</h2>
   <table>
       <tr>
       <td><h3>Todos los productos</h3></td>
       <td></td>
       <td><h3>Todas las ofertas</h3></td>
   </tr>

   <tr>
               <td><select name="producto" id="producto" size="1"
onChange="return productoOnChange()">
       <option value="Todos">Todos los productos disponibles</option>
         <%do until rs.Eof%>
               <option value="<%=rs("id_producto")%>"><%=rs("id_producto")
%></option>
                   <%rs.MoveNext
                 loop%>
       </select></td>
               <td><span id="load"></span></td>
               <td><select name="producto" id="producto" size="1">
       <option value="Todos">Todos los productos con descuento
disponibles</option>
         <%do until rs2.Eof%>
               <option value="<%=rs2("producto_des")%>"><
%=rs2("producto_des")%></option>
                   <%rs2.MoveNext
                 loop%>
       </select></td>
    </tr>
     <tr>
       <td><h5>&nbsp;</h5></td>
       <td><h5>&nbsp;</h5></td>
       <td><h5>&nbsp;</h5></td>
     </tr>
     <tr>
       <td></td>
       <td><input type="submit" name="submit" value="Buscar
productos" /></td>
       <td></td>
     </tr>
     </table>
</form>

       <% Set Conexion = nothing %>

</body>
</html>
---------------------------PARTES DE LA PAGINA
WEB------------------------

Con esto realizo la conexión a la bbdd desde la página web, obtengo
los resultados de los productos y los productos con descuento. Esto (a
grandes rasgos) es lo que quiero mostrar en la aplicación (en la
aplicación tambien muestro una descripción del producto, una imagen,
etc.).
El caso es que no se como hacer la petición desde la aplicación a la
base de datos. Tengo 4 botones, y cada boton lo quiero relacionar con
un select distinto, para mostrar una clase de productos u otros, pero
no logro relacionar los botones con una petición a una bbdd.
Algún pequeño ejemplo, metodo u algún capitulo de algún libro que
trate sobre este tema?

¡Muchas Gracias de antemano!
-----

No se qué lenguaje estás usando... yo uso PHP.

Para lo que dices de la petición, en PHP lo que haría sería añadir un parámetro "GET" a la request del botón y luego en PHP haría la consulta en función del GET recibido.

Por ejemplo, cada botón tendría un TAG.
Todos enviarían el mismo mensaje. (mismo IBAction)
En el código del mensaje, haría algo como esto (cuidado que el GMail no autocompleta...):

NSString * cadena = [NSString stringWithFormat:@"http://.../archivo.php?param=%i", [sender tag]];

Luego, esa cadena la usaría para generar un NSURL y ese NSURL para generar un NSURLRequest.

Le pasas el NSURLRequest al UIWebView y en el PHP del servidor compruebas cual es el GET que estás recibiendo.

En PHP sería con $_GET['param'].

En la web, con el parametro recuperado, ya decido cual es la consulta que quiero hacer.

Con la salvedad de "PHP vs. Lenguaje que no utilizo y no identifico (¿ASP? ¿JSP?)" ¿Es eso lo que preguntas?.

Un saludo.


jmrocamora

unread,
Oct 10, 2011, 4:09:28 AM10/10/11
to ios-spa
Estoy usando VisualBasic Scrip en la página web y ASP en el servidor.

Tengo problemos con generar los botones de la aplicación y asociarlos
a una petición web.

Voy a hacer pruebas para ver si me hace las peticiones desde la
aplicación usando modificaciones
con el código que me dices porque tengo la aplicación atascada desde
hace tiempo con ese punto.
Muchas gracias por la respuesta...

P.D. estaré mas atento para otras veces a la hora de darle al botón ;)

Octavio Chango

unread,
Oct 10, 2011, 8:14:10 AM10/10/11
to ios...@googlegroups.com

Hola,

 

Para contribuir un poco...

 

El problema es que en el código ASP/VB que muestras es para que la pagina sea accedida por un usuario, y al ser así si quieres que la aplicación haga requests y procese la respuesta tendrías que envés de enviar requests "get" enviar requests "post" y construir la data a enviar, y eso es un poco engorroso...

 

Así que si quieres simplificarte la vida tienes que construir una versión especifica para ser accedida por tu aplicación, estilo un API, y esta envés de tener una interfaz de usuario, recibiría los parámetros como "get" es decir que envés de crear un "combo box" o "select" (como es html); la pagina procesa lo que se obtiene del "request.querystring("id_product_type")" (http://xxx.com/xx.asp?id_product_type=123) como el ID del producto... Y luego envés de sacar un listado formateado para el usuario, simplemente sacas un listado (por ejemplo) con un artículo por línea (con un "for" que con "request.write" escriba linea tras linea), y en la aplicación de xcode lo parseas con algo como esto:

 

NSArray *productosArray = [NSArray alloc];
productosArray = [[NSString stringWithString:response] componentsSeparatedByString:@"\n"];

 

Donde response es la respuesta de un NSMutableURLRequest, y de esta forma tendrás tu lista de productos como un array, lista para utilizarla como lo requieras… Para obtener la lista de productos o ofertas o cualquier otra lista, simplemente también creas otra página (o añades distintos tipos de parametros a la actual) que te devuelva dicha lista…

 

Saludos,

Octavio Chango.

Sent: Sunday, October 09, 2011 8:58 PM
Subject: Re: Consulta a una Base de Datos

Reply all
Reply to author
Forward
0 new messages