Mysql Query in C++

  • Onderwerp starter Onderwerp starter Erico
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Erico

Gebruiker
Lid geworden
3 sep 2008
Berichten
11
Beste mensen!

Ik ben nu al een tijdje bezig(lees: 3 maanden) met het volgende:

Ik wil dat de gebruiker een textbestand opgeeft en dat de data in deze textbestand naar een mysql database wordt gekopieerd! Ik heb van alles geprobeerd maar wil niet lukken! Kan iemand mij helpen. Het textbestand hardcoden lukt wel, maar vanaf de commandline dus niet. Alvast bedankt.

char filenaam;
cout << "Typ een bestandsnaam";
cin>> filenaam;


MYSQL *conn;
conn = mysql_init(NULL);
mysql_real_connect(conn,host,username,password,database,0,NULL,0);
mysql_query (conn, "LOAD DATA LOCAL INFILE '/Documents and Settings/Administrator/Desktop/Database/' + filmnaam +' '' INTO TABLE Movies");
mysql_close(conn);
 
Ten eerste, een losse char kan slechts één karakter bevatten, je moet dus een array van karakters declareren of een string.

Ten tweede kan je in C/C++ niet zomaar een char-array concateneren, dat kan alleen met strings. dus bijvoorbeeld:

Code:
char filenaam[1024], buffer[1024];
cout << "Typ een bestandsnaam";
cin >> filenaam;


MYSQL *conn;
conn = mysql_init(NULL); 
mysql_real_connect(conn,host,username,password,database,0,NULL,0);

sprintf(buffer, "LOAD DATA LOCAL INFILE '/Documents and Settings/Administrator/Desktop/Database/%s' INTO TABLE Movies", filenaam);
mysql_query (conn, buffer);
mysql_close(conn);
 
Hey!

Dat van de char heb ik over het hoofd gezien :$ En dan andere.. Ja dat wist ik gewoon niet!

Nu heb ik bijna een gelijk soortige probleem namelijk het volgende:

printf(buffer, "UPDATE films SET Titel = %s WHERE Titel = %s",MovieNameOld, MovieNameNew);

Compiler geeft hier geen error van, maar tijdens het uitvoeren gebeurd er niets... Wat doe ik verkeerd?

Alvast bedankt?
 
printf geeft het resultaat van de geformatteerde tekst op het scherm weer, sprintf plaatst het in een karakter-array. er moet dus nog een s-je voor :)

En waarschijnlijk klopt de SQL hier niet, ik neem tenminste aan dat titel tussen aanhalingstekens moet...
 
De printf zonder 's' dat is gewoon een copy-paste fout van mij!

de sql statement moet ik nog even goed naar kijken, daar zit inderdaad de fout. Als ik de oplossing heb, dan zal ik je dat laten weten!

Bedankt voor je reacties!
 
En waarschijnlijk klopt de SQL hier niet, ik neem tenminste aan dat titel tussen aanhalingstekens moet...

Heb je dit bovenstaande al geprobeerd? Dus de SQL regel aanpassen naar:
Code:
sprintf(buffer, "UPDATE films SET Titel = '%s' WHERE Titel = '%s' ",MovieNameOld, MovieNameNew);
 
sprintf(buffer, "UPDATE films SET Titel = '%s' WHERE Titel = '%s' ",MovieNameOld, MovieNameNew);

Heb ik dus al gedaan, maar het werkt niet... Ik snap het niet, met andere query's lukt het mij ook niet en kan niet gauw iets terug vinden op het i-net.

Een andere probleem. Via commandline naar een bepaalde string zoeken.

Hardcoden lukt wel:
mysql_query(conn, "Select Titel, Acteur from films where Titel LIKE '%Avia%'");

Bovenstaande zoekt titels van films die de text "Avia" bevatten.

Via de commandline zou zijn:


mysql_query(conn, "Select Titel, Acteur from films where Titel LIKE '%'%s'%'");

Maar dit werkt helaas niet. Ik zou niet 1-2-3 weten hoe ik dit moet oplossen. Ik kan helaas ook niet verder werken aangezien ik alleen nog enkele query's moet maken.

:(:(:(:(:confused::confused::confused::confused:
 
mysql_query() doet zelf geen string bewerkingen, dus die %%s% gaat niet werken. Je moet je query eerst maken in een string, met sprintf bijvoorbeeld, en vervolgens voeden aan mysql_query
 
Heb ik gedaan(zie hierboven). Maar wil helaas niet werken. Ik denk dat het query zelf ligt, dat deze niet goed staat genoteerd.


mysql_query() doet zelf geen string bewerkingen, dus die %%s% gaat niet werken. Je moet je query eerst maken in een string, met sprintf bijvoorbeeld, en vervolgens voeden aan mysql_query
 
Iemand die mij een duw(of een harde trap:)) in de juiste richting wil geven?
 
Ik zie 2 dingen waar het fout op kan gaan, ten eerste heb je MovieNameOld/New omgedraait (tenzij de variabelenamen niet kloppen...) en als je procenttekens wilt gebruiken in een string voor sprintf, dien je die ook te escapen. Dus krijg je twee procenttekens achter elkaar.

De volgende twee zouden moeten werken:
Code:
sprintf(buffer, "UPDATE films SET Titel = '%s' WHERE Titel = '%s'",MovieNameNew, MovieNameOld);
sprintf(buffer, "Select Titel, Acteur from films where Titel LIKE '%%%s%%", DeelVanTitel);

Merk trouwens op dat als je nu een titel hebt met aanhalingstekens erin, dat het niet gaat werken.
 
Hey!

Erg bedankt voor je hulp!

Heb het nu eindelijk voor elkaar. Het zoeken naar een string in een database had ik al werkend. Heb namelijk gebruik gemaakt van REGEXP. Hiermee werkt het perfect!

sprintf(buffer,"Select Titel, Acteur from films where Titel REGEXP '%s%'", bepaaldestring);


Nogmaals bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan