Avatar billede naxosnaxos Nybegynder
28. august 2003 - 21:37 Der er 10 kommentarer og
1 løsning

mysql API

Hej

Jeg skal benyttes en MySQL database fra C++. Findes der API eller andet godt til dette?? Det er ren rå C++, ikke noget fancy med borland komponenter ;o). Hvordan gør man dette??
Avatar billede arne_v Ekspert
28. august 2003 - 21:38 #1
MySQL kommer med et C API.

Her er et eksempel jeg tidligere har postet:

#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 arne_v Ekspert
28. august 2003 - 21:39 #2
C API virker naturligvis også i C++.

Der er også noget C++ til MySQL, men det er ofte problematisk at få det
til at virke.

Et reelt alternativ er standard ODBC kald !
Avatar billede naxosnaxos Nybegynder
28. august 2003 - 21:40 #3
hmm ja C API eller ODBC hvor stor forskel er der??
Avatar billede arne_v Ekspert
28. august 2003 - 21:43 #4
Stor forskel.

MySQL C API er nok nemmere at bruge.

Men med ODBC er du database uafhængig.

MySQL eller Access eller noget tredie betyder ikke noget.
Avatar billede arne_v Ekspert
28. august 2003 - 21:44 #5
Du får lige et C++ ODBC eksempel for at kunen vurdere forskellen:

#include <iostream>

using namespace std;

#include <stdlib.h>

#include <windows.h>
#include <sql.h>
#include <sqlext.h>

char* dsn = "TestMSAccess";
char* un = "";
char* pw = "";
char* sqlstr = "SELECT * FROM T1";

int main(int argc, char *argv[])
{
  SQLHENV Environment;
  SQLHDBC DataBaseConnect;
  SQLHSTMT stmt;
  SQLRETURN stat;
  stat = SQLAllocEnv(&Environment);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocEnv" << endl;
  stat = SQLAllocConnect(Environment,&DataBaseConnect);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocConnect" << endl;
  stat = SQLConnect(DataBaseConnect,
                    (SQLCHAR *)dsn,strlen(dsn),
                    (SQLCHAR *)un,strlen(un),
                    (SQLCHAR *)pw,strlen(pw));
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in Connect" << endl;
  stat = SQLAllocStmt(DataBaseConnect,&stmt);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocStmt" << endl;
  stat = SQLExecDirect(stmt,(SQLCHAR *)sqlstr,strlen(sqlstr));
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in ExecDirect" << endl;
  int i,il,sl;
  char s[10];
  stat = SQLBindCol(stmt,1,SQL_C_LONG,&i,sizeof(i),(SQLINTEGER *)&il);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in BindCol" << endl;
  stat = SQLBindCol(stmt,2,SQL_C_CHAR,s,sizeof(s),(SQLINTEGER *)&sl);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in BindCol" << endl;
  for(;;) {
    stat = SQLFetch(stmt);
    if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) break;
    s[sl] = '\0';
    cout << i << " " << s << endl;
  }
  SQLFreeStmt(stmt,SQL_DROP);
  SQLDisconnect(DataBaseConnect);
  SQLFreeConnect(DataBaseConnect);
  SQLFreeEnv(Environment); 
  system("PAUSE");   
  return 0;
}
Avatar billede naxosnaxos Nybegynder
28. august 2003 - 21:48 #6
hehe jeg så også lige på mysql dokumentation om C++, den har de godt nok snørklet noget. Forlige at være total besværlig har du så en ODBC?? tror mange vil kunne benytte denne tråd ;)
Avatar billede arne_v Ekspert
28. august 2003 - 22:31 #7
Jeg formoder at ODBC eksemplet var OK.
Avatar billede naxosnaxos Nybegynder
28. august 2003 - 22:41 #8
ok takker. nu mangler jeg bare lige mysql.h
Avatar billede arne_v Ekspert
28. august 2003 - 22:44 #9
mysql.h (og libmysql.lib + libmysql.dll som du også skal bruge) kommer
med MySQL !
Avatar billede naxosnaxos Nybegynder
28. august 2003 - 22:47 #10
jeps ok men jeg skal i kontakt med en mysql database på en anden maskine end den jeg sidder på og her er ikke mysql.....hvor får jeg det jeg behøver
Avatar billede arne_v Ekspert
28. august 2003 - 22:53 #11
Haps include og lib directoriet fra en maskine med MySQL.

Eller endnu bedre installer MySQL på din udviklings-maskine. Fordi så
kan du teste på livet løs uden at genere nogen.
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