|
Mysql desde C
|
| Autor |
Mensaje |
mysqlde
Usuario PL
Mensajes: 3
Grupo: Registrado
Registro en: Mar 2008
Estado:
Sin Conexión
Reputación: 0
|
Mysql desde C
Hola estoy haciendo un programa para acceder a Mysql desde c (tiene que ser más rapido que PHP)
El problema que tengo es que no domino mucho el lenguaje...
Lo que quiero es lea toda una tabla y la guarde en un array, (Son todo numeros decimales)
Pero no se como hacerlo.
Os pongo el código.
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
void err(void) {
fprintf(stderr, "%s\n", mysql_error(&mysql) );
exit(1);
}
int main()
{
int i,g;
int **p ;
int n=3000,m=3000,j=0;
unsigned nn[n][m];
p = (int**) malloc(n*sizeof(int*));
if(!(mysql_real_connect(&mysql,"localhost","root",
"mmm","bolsa",3306,NULL,0))) err();
if(mysql_query(&mysql,"SELECT * FROM cotizaciones")) err();
if(!(res = mysql_store_result(&mysql))) err();
while((row = mysql_fetch_row(res)))
{
p[j] = (int*)malloc(m*sizeof(int));
for (i=0 ; i < mysql_num_fields(res); i++)
{
p[i][j]=row[i];
/// Esto no funciona, quiero grabar el resultado en el ARRAY p
}
j++;
}
if (!mysql_eof(res)) err();
mysql_free_result(res);
mysql_close(&mysql);
return 0;
}
Saludos.
|
|
| 03-07-2008 06:28 PM |
|

|
german
Moderador
    
Mensajes: 231
Grupo: Moderadores
Registro en: Apr 2006
Estado:
Sin Conexión
Reputación: 3
|
RE: Mysql desde C
Mirá, te recomiendo que vayas de a poco, primero hace el código de conexión de la base de datos y probalo, si anduvo, despues trata de hacer una consulta y mostralo por pantalla. De otra forma te va a tirar 20 errores y no vas a saber ni por cual empezar. Bueno, ese es el consejo que te doy si recien empezas con el lenguaje.
También ayudaría si especificás que error te tira.
Si me pasas el enlace del manual que estas leyendo por ahi te puedo orientar mejor.
Aca tenes un ejemplo si te sirve http://linuxfocus.org/English/September2...e304.shtml
|
|
| 03-07-2008 08:26 PM |
|
 |
mysqlde
Usuario PL
Mensajes: 3
Grupo: Registrado
Registro en: Mar 2008
Estado:
Sin Conexión
Reputación: 0
|
RE: Mysql desde C
A la base de datos funciona, y muestra los datos en la pantalla
Este codigo es el que muestra los datos en la pantalla:
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
void err(void) {
fprintf(stderr, "%s\n", mysql_error(&mysql) );
exit(1);
}
int main()
{
int i;
if(!(mysql_real_connect(&mysql,"localhost","root",
"mmm","bolsa",3306,NULL,0))) err();
if(mysql_query(&mysql,"SELECT * FROM cotizaciones")) err();
if(!(res = mysql_store_result(&mysql))) err();
while((row = mysql_fetch_row(res))) {
for (i=2 ; i < mysql_num_fields(res); i++)
{
printf("%s",row[i]); /////////////QUIERO GUARDARLO EN UNA ARRAY TODOS LOS DATOS
}
}
if (!mysql_eof(res)) err();
mysql_free_result(res);
mysql_close(&mysql);
return 0;
}
|
|
| 03-07-2008 08:48 PM |
|
 |
mysqlde
Usuario PL
Mensajes: 3
Grupo: Registrado
Registro en: Mar 2008
Estado:
Sin Conexión
Reputación: 0
|
|
| 03-07-2008 08:50 PM |
|

|
german
Moderador
    
Mensajes: 231
Grupo: Moderadores
Registro en: Apr 2006
Estado:
Sin Conexión
Reputación: 3
|
RE: Mysql desde C
Muy bien!, ahora, para copiar cadenas de texto tenés que usar funciones. Esta la función sprintf que es la mas facil de usar (pero la mas lenta), te asigna sola la memoria que necesita para guardar. Ejemplo:
sprintf(mivariablechar,"%s",row[i])
También esta la funcion strcpy que copia las cadenas pero la variable destino tiene que tener el espacio suficiente asignado. Y tambien hay una que se llama strdup que asigna el espacio automaticamente.
Te recomiendo que leas este manual que explica mas en detalle.
http://www.elrincondelc.com/cursoc/cursoc12.html
Por otra parte, si me decís que los datos son tipo float, seguramente te convenga almacenarlos como float. Te dejo la referencia de las funciones para convertir de string a float.
http://www.gnu.org/software/libtool/manu...-of-Floats
|
|
| 03-08-2008 05:05 PM |
|
 |
^Monika^
Usuario PL
Mensajes: 2
Grupo: Registrado
Registro en: Aug 2008
Estado:
Sin Conexión
Reputación: 0
|
RE: Mysql desde C
Yo como tu ando verde con C, pero. Fijate que en tu codigo no empiezas el objeto Mysql a iniciar...
mysql = mysql_init(NULL);
tambien fijate en esta linea :::
p[i][j]=row[i];
al puntero 'p' le asignas 2 gestores de almacenamiento o sea p[i][j] y fijate que row solo tiene espacio para almacenar 1 columna no 2 como indicas en p. Y esto logicamente es imposible.
Tambien fijate en
int i,g;
int **p ;
int n=3000,m=3000,j=0;
unsigned nn[n][m];
unsigned nn[n][m]; // Y 'nn' de que tipo es??? int? char? string??? no le indicaste un tipo, aunque no uses dicha variable en ninguna parte esto causa un segmentation fault.
Tambien fijate el puntero 'p' asignas memoria 2 veces innecesariamente ya que en ningun momento liberas esa memoria asignada nisiquiera al terminar tu codigo. Tambien ten pendiente los tipos de datos *p es un puntero entero, y row que pertenece a MYSQL_ROW que es de tipo estructura al no ser ambos del mismo tipo, no podras asignar row[i] a p.
|
|
| 08-18-2008 12:43 PM |
|
 |