SQL en C

SQL en C - C - Programmation

Marsh Posté le 01-04-2008 à 15:49:24    

Bonjour tout le monde,
Je cherche une doc qui me permette de faire des requetes ur un serveur sql ou mysql en c sous linux/unix.
Merci

Reply

Marsh Posté le 01-04-2008 à 15:49:24   

Reply

Marsh Posté le 01-04-2008 à 16:33:00    

http://www.mysql.com


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 01-04-2008 à 16:45:05    

merci

Reply

Marsh Posté le 01-04-2008 à 16:59:19    

Y a t'il des doc qui donnent des exemples pour se  connecter sur une base et des exples de requetes en c .

Reply

Marsh Posté le 01-04-2008 à 17:00:54    

http://www.google.com/search?q=usi [...] =firefox-a :??:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 01-04-2008 à 17:20:10    

vite ! une dose de code !

Code :
  1. #include <stdio.h>
  2. #include <memory.h>
  3. #include <stdlib.h>
  4. #include <winsock2.h>
  5. #include <mysql.h>
  6. #define SERVER_NAME "10.0.0.12"
  7. #define DB_USER "root"
  8. #define DB_USERPASS ""
  9. #define DB_NAME "vitadb"
  10. void mysqlRequete(MYSQL *,const char *,char *);
  11. int main(int argc,char **argv)
  12. {
  13. FILE *fdd, *fds;
  14. //champs de la bdd
  15. char C_NUM_CONT_D[10];
  16. char C_NUM_CONT_32D[10];
  17. char APPLI_VERS[10];
  18. char ligne[20], requetesql[1024];
  19. int i;
  20. MYSQL *hnd=NULL;
  21. const char *sinf=NULL;
  22. if (argc != 3) {
  23.  fprintf(stderr,"Usage : sdfq fileSource fileDest\n" );
  24.  exit(-1);
  25. }
  26. hnd = mysql_init(NULL);
  27. if (NULL == mysql_real_connect(hnd,SERVER_NAME,DB_USER,DB_USERPASS,DB_NAME,0,NULL,0))
  28. {
  29.  fprintf(stderr,"Problem encountered connecting to the %s database on %s.\n",DB_NAME,SERVER_NAME);
  30. }
  31. else
  32. {
  33.  fds = fopen(argv[1],"r" );
  34.  fdd = fopen(argv[2],"w" );
  35.  if (!(fds && fdd)) {
  36.   fprintf(stderr,"Probleme d'ouverture de fichier\n" );
  37.   exit(-1);
  38.  }
  39.  while ((ligne[0]=fgetc(fds))!=EOF)
  40.  {
  41.   if (ligne[0]=='D')
  42.   {
  43.    memset(C_NUM_CONT_D,0,10);
  44.    memset(C_NUM_CONT_32D,0,10);
  45.    memset(APPLI_VERS,0,10);
  46.    for (i=1;i<=12;i++)
  47.     ligne[i]=fgetc(fds);
  48.    ligne[12]=0;
  49.    memcpy(C_NUM_CONT_D,&ligne[4],9);
  50.    sprintf(requetesql,"SELECT C_NUM_CONT_32D FROM v_contrat v where v.C_NUM_CONT_D=\"%s\"",&ligne[4]);
  51.    mysqlRequete(hnd,requetesql,C_NUM_CONT_32D);
  52.    sprintf(requetesql,"SELECT APPLI_VERS FROM v_pvit pvit,v_tpe_log tpe_log where tpe_log.ID_TPE_LOG=pvit.ID_TPE_LOG and pvit.C_NUM_CONT_32DB=\"%s\"",C_NUM_CONT_32D);
  53.    mysqlRequete(hnd,requetesql,APPLI_VERS);
  54.    fprintf(fdd,"%s\t%s\t%s\n",C_NUM_CONT_32D,C_NUM_CONT_D,APPLI_VERS);
  55.   }
  56.   else
  57.    fprintf(fdd,"\n" );
  58.  }
  59.  mysql_close(hnd);
  60.  fclose(fds);
  61.  fclose(fdd);
  62.  printf("\tUn fichier transformé\n" );
  63. }
  64. return 0;
  65. }
  66. void mysqlRequete( MYSQL *handle, const char *requete, char *reponse )
  67. {
  68. MYSQL_RES *res=NULL; // result of querying for all rows in table
  69. MYSQL_ROW row; // one row returned
  70. char commastr[2]; // to put commas in the output
  71. int i,numf=0; // number of fields returned from the query
  72. sprintf(reponse,"XXXXXXXX" );
  73. if (!mysql_query(handle,requete))
  74. {
  75.  res = mysql_use_result(handle);
  76.  if (res)
  77.  {
  78.   numf = mysql_num_fields(res);
  79.   row = mysql_fetch_row(res);
  80.   while (row)
  81.   {
  82.    commastr[0]=commastr[1]=(char)NULL;
  83.    for (i=0;i<numf;i++)
  84.    {
  85.     if (row[i] == NULL)
  86.     {
  87.      sprintf(reponse,"%sBUG",commastr);
  88.     }
  89.     else
  90.     {
  91.      sprintf(reponse,"%s%s",commastr,row[i]);
  92.     }
  93.     commastr[0]=',';
  94.    }
  95.    row = mysql_fetch_row(res);
  96.   }
  97.   mysql_free_result(res);
  98.  }
  99.  else
  100.  {
  101.   fprintf(stderr,"Failed to use the result acquired!\n" );
  102.  }
  103. }
  104. else
  105. {
  106.  fprintf(stderr,"Failed to execute query. Ensure table is valid!\n" );
  107. }
  108. return;
  109. }

Reply

Marsh Posté le 02-04-2008 à 02:12:36    

Je  regarde ton code il est bien mais ce  que je cherche cest sous linux sans la bibliotheque mysql,
avec ouverture d'une socket sur port de la machine distante, envoie d'une requete construite ect ect

Reply

Marsh Posté le 02-04-2008 à 07:42:26    

yartempion a écrit :

Je  regarde ton code il est bien mais ce  que je cherche cest sous linux sans la bibliotheque mysql,
avec ouverture d'une socket sur port de la machine distante, envoie d'une requete construite ect ect


tu veux réécrire la lib mysql? pour quoi faire?[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 02-04-2008 à 11:39:06    

skeye a écrit :


tu veux réécrire la lib mysql? pour quoi faire?[:pingouino]


 Par ce qu'il m'arrive d'etre obligé de travailler sur des machines qui ne disposent pas des bibliotheques necessaires.

Reply

Marsh Posté le 02-04-2008 à 11:40:53    

...et ce n'est pas possible d'installer la bibliothèque, plutôt? Ou de la livrer avec ton appli?
Faire ta propre bibliothèque est un énorme boulot, ça me parait dingue de vouloir le refaire soi-même...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 02-04-2008 à 11:40:53   

Reply

Marsh Posté le 02-04-2008 à 11:58:49    

skeye a écrit :

...et ce n'est pas possible d'installer la bibliothèque, plutôt? Ou de la livrer avec ton appli?
Faire ta propre bibliothèque est un énorme boulot, ça me parait dingue de vouloir le refaire soi-même...


 
 
Autant commencer directement par la stdlib, on ne sait jamais [:cerveau boidleau]


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
Reply

Marsh Posté le 02-04-2008 à 12:02:49    

J'y ai pensé mais HA HA!!
je n'ai pas besoin d'avoiir toutes les fonctionnalités mais juste la methode de connexion et faire des requetes en tant que client distant.

Reply

Marsh Posté le 02-04-2008 à 12:04:16    

rien que la connexion, envoyer des requêtes et lire le résultat t'en as pour un bon moment à développer ça...[:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 02-04-2008 à 12:04:27    

Il me faudrait la methode de connexion et d'authentification pour faire des petits programmes qui pourraient faire des requetes toutes simples.

Reply

Marsh Posté le 02-04-2008 à 14:40:15    

haaa ta question de départ n'était pas aussi précise ;)
je ferais un principe de passerelle ce qui évite d'embarquer une lib mysql :
client TCP léger -> envois de "select * from table"->serveur TCP ->libmysql("select * from table" )->envois de la réponse->client TCP léger content.
 

Reply

Marsh Posté le 02-04-2008 à 15:02:00    

djobidjoba a écrit :

haaa ta question de départ n'était pas aussi précise ;)
je ferais un principe de passerelle ce qui évite d'embarquer une lib mysql :
client TCP léger -> envois de "select * from table"->serveur TCP ->libmysql("select * from table" )->envois de la réponse->client TCP léger content.
 


Mais comment ça se passe au niveau de l'encodage tu envoie les instructions en texte et est ce que la casse est importante, ou alors y a t'il des codes particuliers. Comment fait on la connexion au serveur distant? Bon l'ouverture de socket etc je sais faire mais au moment de la connexion y'a t'il un protocol particulier à respecter pour l'authentification du style envoyer une chaine USER=toto password=titi. ou alors comme telnet j'attends de recevoir une chaine qui me demande login et une autre password. et je répond a chaque fois. Comment envoyer un requete et comment interpreter les réponses les séparateurs ou comlment est fragementee la réponse?
Merci

Reply

Marsh Posté le 02-04-2008 à 17:13:05    

il faut utiliser la lib mysql coté serveur.
tu code un client serveur tcp basique qui se contente d'envoyer et de recevoir des chaines de caractère.
à l'arrivée d'une chaine sur le serveur, tu exécute la requête via la lib mysql, et le résultat tu le renvois au client.

Reply

Marsh Posté le 03-04-2008 à 06:38:23    

Salut,
Visiblement on peut passer des requetes sur une mysql en ligne de commandes. Donc soit j'ouvre une connexion sur le shell de la machine distante et je lance des requetes en commandes et je recupere le flux de données ou alors je dois connaitre le numero de port pur me connecter directement a la base pour passer des requetes sql c'est ca?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed