Avatar billede noden Nybegynder
06. januar 2004 - 19:26 Der er 27 kommentarer og
1 løsning

MySql database connect fra C++

Jeg kører Debian GNU og har g++ 3.3.3 og har MySql++ installeret.
Jeg kan ikke få det jeg har lavet compilet.
På trods af min lille kode kommer der ca. 150 fejl fra mysql++ headerfilerne.
Har husket mit namespace!!
jeg ville blive rigtig glad hvis en kunne poste et eks. på hvordan man connecter til databasen.

Der behøver ikke være andet end selve forbindelsen, så skulle jeg gerne være godt igang.
Avatar billede noden Nybegynder
06. januar 2004 - 19:28 #1
Har selvfølgelig også mysql installeret og har lavet en database med en tabel i.
Avatar billede arne_v Ekspert
06. januar 2004 - 19:30 #2
#include <stdio.h>
#include <stdlib.h>

#include "mysql.h"

int main()
{
    MYSQL *handle;
    MYSQL_RES *result;
    MYSQL_ROW row;
    int nfields;
    int *l;
    int i;
    handle= mysql_init(NULL);
    if(handle == NULL)
    {
        printf("MySQL error: %s", mysql_error(handle));
        exit(1);
    }
    if(!mysql_real_connect(handle, "localhost", "", "", "Test", 0, NULL, 0))
    {
        printf("MySQL error: %s", mysql_error(handle));
        exit(1);
    }
    mysql_query(handle, "SELECT * FROM T1");
    result = mysql_store_result(handle);
    nfields = mysql_num_fields(result);
    while ((row = mysql_fetch_row(result))) {
        l = (int *)mysql_fetch_lengths(result);
        for (i=0; i<nfields; i++) {
            printf(" %.*s", l[i], row[i] ? row[i] : "NULL");
        }
        printf("\n");
    }
    mysql_free_result(result);
    mysql_close(handle);
    return 0;
}
Avatar billede noden Nybegynder
06. januar 2004 - 19:32 #3
MySql++ er vist version 1.7.9 og MySql er version 4.0.16
Avatar billede arne_v Ekspert
06. januar 2004 - 19:37 #4
Sorry - jeg læste ikke dit dpørgsmål grundigt nok.

Jeg antog gode gamle MySQL C API. Det virker altid.

Du vil bruge MySQL++.

Jeg har aldrig prøvet det på Linux.

Jeg prøvede på Windows og kunne ikke få det til at virke.

Og da MySQL C API er så nemt at få til at virke kunne jeg ikke
se nogen grund til ikke at bruge det.
Avatar billede noden Nybegynder
06. januar 2004 - 19:43 #5
Jeg har ændret stien til headerfilen da min ligger i "mysql/mysql.h"
Men får nedenstående fejl!
Skal jeg flytte nogle af filerne? Eller er det fordi der er ændret i den nye version?
På mysql.com henviser de til en sqlplus.hh fil?!
Men deres eksempler virker heller ikke.. hos mig!

webserv:/sdbdata/sources/mysql# g++ ./mysql.cpp -o ./mysql
mysql.cpp:38:162: warning: no newline at end of file
/tmp/cco20k9r.o(.text+0x18): In function `main':
: undefined reference to `mysql_init'
/tmp/cco20k9r.o(.text+0x2c): In function `main':
: undefined reference to `mysql_error'
/tmp/cco20k9r.o(.text+0x8b): In function `main':
: undefined reference to `mysql_real_connect'
/tmp/cco20k9r.o(.text+0x9a): In function `main':
: undefined reference to `mysql_error'
/tmp/cco20k9r.o(.text+0xc9): In function `main':
: undefined reference to `mysql_query'
/tmp/cco20k9r.o(.text+0xd4): In function `main':
: undefined reference to `mysql_store_result'
/tmp/cco20k9r.o(.text+0xe2): In function `main':
: undefined reference to `mysql_num_fields'
/tmp/cco20k9r.o(.text+0xf0): In function `main':
: undefined reference to `mysql_fetch_row'
/tmp/cco20k9r.o(.text+0x109): In function `main':
: undefined reference to `mysql_fetch_lengths'
/tmp/cco20k9r.o(.text+0x194): In function `main':
: undefined reference to `mysql_free_result'
/tmp/cco20k9r.o(.text+0x19f): In function `main':
: undefined reference to `mysql_close'
collect2: ld returned 1 exit status
webserv:/sdbdata/sources/mysql#
Avatar billede noden Nybegynder
06. januar 2004 - 19:45 #6
Oki!
Men det ligner noget namespace fejl eller?!
Avatar billede noden Nybegynder
06. januar 2004 - 19:46 #7
Jeg har også mysql.h og det er den jeg prøvede da jeg fik ovenstående compilering.
Det er fint med den hvis det virker!
Avatar billede arne_v Ekspert
06. januar 2004 - 19:50 #8
mysql.h og de funktioner der hedder mysql_ er MySQL C API som min kode også
bruger og ikke MySQL++ !
Avatar billede noden Nybegynder
06. januar 2004 - 19:50 #9
Gad vide om det overhovedet er en programfejl og ikke noget jeg skal sætte op!?
Avatar billede arne_v Ekspert
06. januar 2004 - 19:50 #10
Og du mangler såmænd bare at linke mod libmysql.a !!
Avatar billede arne_v Ekspert
06. januar 2004 - 19:52 #11
F.eks.:

g++ mysql.cpp libmysql.a /-o ./mysql
Avatar billede noden Nybegynder
06. januar 2004 - 19:52 #12
Arne skrev:
mysql.h og de funktioner der hedder mysql_ er MySQL C API som min kode også
bruger og ikke MySQL++ !
Jeg har MySql.h liggende, skal jeg hente yderligere for at bruge denne?
Der ligger følig flere headerfiler i samme mappe.
Avatar billede arne_v Ekspert
06. januar 2004 - 19:53 #13
Og for at slippe af med den første warning skal du bare lave et linie skift
efter sidste linie.
Avatar billede arne_v Ekspert
06. januar 2004 - 19:55 #14
Eller:

g++ mysql.cpp /somewhere/mysql/lib/libmysql.a /-o ./mysql

da libmysql.a nok ligger i et andet dir.
Avatar billede noden Nybegynder
06. januar 2004 - 20:01 #15
Ja, den fil har jeg så ikke!
Ved du om det gælder det samme for mysql++?
Avatar billede arne_v Ekspert
06. januar 2004 - 20:13 #16
Den hedder vist libmysqlclient.a !
Avatar billede noden Nybegynder
06. januar 2004 - 20:29 #17
Jeg har igen forsøgt med MySQL++ og sqlplus.hh som jeg skal inkludere ser ud til at inkludere mysql.h men den kan ikke finde den!
Skal jeg rykke inkludefilerne eller ændre i headerfilen?
Eller noget helt andet?
Avatar billede noden Nybegynder
06. januar 2004 - 20:31 #18
..Og du havde ret med hensyn til libmysqlclient.a Arne.. Selvføligelig!
Avatar billede arne_v Ekspert
06. januar 2004 - 20:32 #19
Og med libmysqlclient.a burde du også undgå alle de fejl.
Avatar billede arne_v Ekspert
06. januar 2004 - 20:33 #20
Med hensyn til mysql++ build så prøv med:

g++ -I/usr/include/mysql ...

eller hvor mysql .h filerne nu ligger

(men som sagt - jeg kender ikke mysql++)
Avatar billede noden Nybegynder
06. januar 2004 - 20:41 #21
Hmm, det lader til jeg mangler nogle sqlplus headerfiler.
Der er nok sket en fejl under installationen. (Hvilket kan være en mulighed!
Det ser i øvrigt ud til at mysql eller en anden .. inkluderer iostream.h eller en anden depreciatet headerfile!
Jeg synes du fortjener de point.
Du kan jo ikke gøre for min server driller!
Tak for hjælpen!
Det kan være jeg vender tilbage!!

Hvad er den der .a fil for noget?
Avatar billede arne_v Ekspert
06. januar 2004 - 20:46 #22
En .a fil er et bibliotek med oversat kode.

libmysqlclient.a indeholder den oversatte kode for alle mysql_* funktionerne.
Avatar billede arne_v Ekspert
06. januar 2004 - 20:47 #23
Du kunne prøve at geninstallere mysql++, men som sagt jeg opgav på
Windows !
Avatar billede noden Nybegynder
06. januar 2004 - 20:55 #24
Oki!
Jeg troede bare det var objektfiler .o!
Men så har jeg også lært noget idag!
Avatar billede arne_v Ekspert
06. januar 2004 - 20:56 #25
En .a er flere .o filer som er samlet i en fil af praktiske grunde !
Avatar billede arne_v Ekspert
06. januar 2004 - 20:58 #26
Prøv:

ar t libmysqlclient.a

så kan du se hvilke .o filer der er i den.
Avatar billede noden Nybegynder
06. januar 2004 - 21:12 #27
Lidt lige som en jarfil i java?
Du er en haj Arne!
Avatar billede arne_v Ekspert
06. januar 2004 - 21:14 #28
Ja.

Rødmer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester