Gå til innhold

Lese/skrive til mySQL fra C++


Anbefalte innlegg

Holder for tiden på med et hovedprosjekt der det blant annet skal benyttes en mySQL-database for å lagre data.

Har kikket litt på mySQL++ API'en som finnes på mySQL.org, men jeg klarer ikke engang å få kjørt eksemplene i dokumentasjonen uten å få feil. (Stor sett linkeren som klager)

Er det noen der ute som har noen tips/hint/fornuftig hjelp å gi meg?

Det må da være noen som har gjort dette før.

 

Bruker VC++ 6.0, mySQL 4.0.18 og mySQL++ 1.7.1

Lenke til kommentar
Videoannonse
Annonse

Du må linke med mysql-biblioteket ja, akkurat som du må linke med opengl-biblioteket når du skal bruke det.

 

Edit:

..og du må sikkert legge til pathen til mysql headerene så kompileren finner disse.

Endret av søppel
Lenke til kommentar

Hvis det er linkeren som klager bruker du sannsynligvis feil "runtime library" ( Project Settings -> C/C++ -> Category -> Code Generation).

 

Du må bruke det samme runtime library når du kompilerer den statiske lib fila og applikasjonen din (går ut fra at du linker statisk).

 

Kan du kanskje vise oss noen av feilmeldingene? Og hva mener du med "stort sett linkeren som klager"? Får du kompileringsfeil også?

 

Edit: gikk ut fra at du faktisk prøvde å linke mysql++...

Endret av kjetil7
Lenke til kommentar

Bør vel også nevne at det blir brukt STLport 4.6.2 (men jeg tror ikke at det har noen innvirkning, siden jeg får samme feil når jeg prøver uten)

Det kommer også en del warnings under kompileringen av mysql++.lib

Alle av typen:

c:\mysql++-1.7.1-1-win32-vc++\sqlplus\convert1.hh(40) : warning C4273: 'strtol' : inconsistent dll linkage.  dllexport assumed.

Har også sjekket at jeg bruker samme runtime library.

Er nå nede på 1 feil,

custom2.obj : error LNK2001: unresolved external symbol "void __cdecl print_stock_table(class MysqlQuery &)" (?print_stock_table@@YAXAAVMysqlQuery@@@Z)

 

Husk på at dette er tutorial-eksemplene til mySQL++, jeg har ikke skrevet print_stock_table, men ifølge kommentaren i koden skal denne skrive ut den nye tabellen etter at det er blitt lagt inn data.

 

Det skal da ikke være så vanskelig å få kjørt noen eksempler? :hmm:

Lenke til kommentar

Bare grabba noe fra google

 

#include <iostream>
#include <sqlplus.hh>
#include <iomanip>
#include <string>
#define HOST "localhost" // so, where's your mysql server?
#define DB "enderunix" // and database name?
#define USERNAME "root" // a user granted access to the above database?
#define PASSWORD "" // enter the password for the above user. If 
                  // there's no password, leave it as it is...

int main () {   

struct Person {
int id;
string name;
string surname;
string phone;
string email;
string web;
};
Person person;
cout << "Please enter name\n"; // get the name to bu queried.
cin >> person.name;

Connection connection (use_exceptions);
   try {
   connection.connect("", HOST, USERNAME, PASSWORD);
   connection.select_db(DB);
   Query query = connection.query();
   // Querymiz yapiliyor:
   query << "SELECT * FROM fihrist WHERE name = \"" << person.name
   << "\"";
   
   try {

   Result result = query.store(); // query.store() executes query 
   // and stores it. and we create a result object of Result class
   // which is bound to query object.
   Row row; // this is for row[""]
   Result::iterator i;
   int count = 0;
   for ( i = result.begin(); i != result.end(); i++ ) { 
   // loop till the end of result.
   row = *i;
   cout << "\nRecord #" << ++count << "\tID: " <<
   row["id"] << endl;
   cout.setf(ios::left);
   cout << setw(10) << "Name" << row["name"] << "\n"
   << setw(10) << "Surname" << row["surname"] << "\n"
   << setw(10) << "E-Mail" << row["email"] <<  "\n"
   << setw(10) << "Phone" << row["phone"] <<   "\n"
   << setw(10) << "Web" << row["web"] <<  "\n";
   }
   cout << "\nTotally, " << result.size() << " records listed.\n\n";
   } catch (BadQuery er) {
   cerr << "Error: " << er.error << endl;
   return -1;
   }
   } catch (BadQuery er) {
   cerr << "Error: " << er.error << endl;
   return -1;
   }
   catch (BadConversion er) {
   cerr << "Error: Tried to convert \"" << er.data <<  "\" to a \""
   << er.type_name << "\"." << endl;
   return -1;
   }
   return 0;
   }
//-----------------------ends here--------------------------------

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...