Bazy danych MySQL i C++

0

Witam

Zainstalowałem MySQL Server 6.0. Utworzyłem nową baze,tabele i rekordy. Tylko nie wiem gdzie to jest zapisane i jak wyłuskać te informacje, potrzebuje je wykorzystać w C++. Prosze o pomoc.

Pozdrawiam
Macylapka

0

Potrzebujesz użyć technologie dostępu do baz danych, np. ado lub zeos.

0

Potrzebujesz biblioteki do obsługi połączeń oraz zapytań do bazy MySQL.

Jeśli pracujesz w środowisku DevC++ lub Code::Blocks ściągnij paczki odpowiedzialne za to ( libmysql lub mysql++), jeśli MS Visual to ściągnij biblioteki ( te same do wyboru libmysql lub mysql++ ), zbuduj je i dołącz do projektu.

Potem już tylko łączysz się z bazą, wykonujesz zapytania i możesz "bawić" się danymi z bazy.

Pozdrawiam.

0

Herk napisał

Potem już tylko łączysz się z bazą

Jest jakaś inna możliwość niż połączenie sieciowe z serwerem baz danych ?

0

hmm, chyba nie bardzo ( ale mogę się mylić )

MySQL to serwer bazy danych, czyli realizuje i udostępnia usługi połączeniowe.

Możesz natomiast zainteresować się SQLite-m.

Zawartość bazy przechowywana jest w pliku i to na nim wykonujesz wszystkie operacje.

0

Już wypróbowałem SQLite ;] Plik faktycznie znajduje sie na dysku. A wie może kolega gdzie mogę się dowiedzieć jak się wykorzystać ten plik w C++ ?

0

Tutaj jest cała dokumentacja SQLite, zarówno dla zapytań SQL jak i interfejsu C/C++

http://www.sqlite.org/sqlite_docs_3_6_6.zip

Edit : No i zapomniałem, że musisz ściągnąć bibliotekę SQLite ze strony producenta i dodać do swojego projektu - ale to chyba jasne jest :-)

0

No nie do końca jasne :-( . Ale jak będzie w helpie to damy rade :-) - za jakiś czas.

Z kąd wziąć <sqlite3.h> [???] Czy (definicja?) będzie bibliotece " sqlite3.dll" ?

0

Zrób tak :

1' Ściągnij sobie tą paczkę
http://www.sqlite.org/sqlite-amalgamation-3_6_6_2.zip

2' Rozpakuj
Masz tam trzy pliki. Potrzebne będą Ci te dwa :

sqlite3.c
sqlite3.h

3' W swoim środowisku programistycznym ( czy to VS czy Dev lub CB ) stwórz projekt biblioteki statycznej - *.lib lub *.a

EDIT : projekt biblioteki twórz dla języka C

4' Dodaj te dwa pliki do projektu.

5' Zbuduj projekt i w ten sposób masz bibliotekę sqlite + plik nagłówkowy z deklaracjami funkcji.

Potem już tylko dodajesz do projektu bibliotekę, dodajesz plik nagłówkowy i powinno działać :-)

0

Herk napisał :

3' W swoim środowisku programistycznym ( czy to VS czy Dev lub CB ) stwórz projekt biblioteki statycznej - *.lib lub *.a

EDIT : projekt biblioteki twórz dla języka C

5' Zbuduj projekt i w ten sposób masz bibliotekę sqlite + plik nagłówkowy z deklaracjami funkcji.

Z racji tego że nie mam zbyt dużego doświadczenia prosze, czy może opisac troche jaśniej albo gdzie moge się dowiedzieć how to ?

4' Dodaj te dwa pliki do projektu.

A można do folderu w którym znajdują sie pliki *.h compilatora ?

Po dodaniu tych dwóch plików do folderu include compilatora, nie ma problemu z kompilacją dyrektywy #include <sqlite3.h> :-)

0

AD. 3'

Środowisko programistyczne : to środowisko w którym piszesz swoje programy. Microsoft Visual Studio, Dev C++, Code::Blocks.

W zależności od rodzaju środowiska, tworzysz projekt biblioteki statycznej ( Static Lib ) z opcji New Project.

Gdy już taki projekt utworzysz ( najlepiej pusty ) skopiuj do katalogu utworzonego projektu pliki, o których napisałem. Potem w środowisku w opcjach projektu dodaj odpowiednio dwa pliki *.c i *.h.

Następnym krokiem jest zbudowanie biblioteki. Bibliotekę budujesz jak zwykły program.

W katalogu Debug powstanie Ci plik nazwa_projektu.lib lub nazwa_projektu.a

Mając bibliotekę możesz zacząć jej używać w swojej aplikacji.

No i tu znowu zależy od środowiska w jakim piszesz. Tak czy siak bibliotekę musisz dodać do linkera - szukaj w opcjach projektu.

Potem do katalogu swojego programu kopiujesz plik *.h, includujesz go w programie i powinno działać.

Napisz w jakim środowisku piszesz.

0

Używam MV 6.0 . Tylko tu zaś rodzi się problem, mianowicie komunikacja z bazą. Utworzyłem bibliteke tylko bez definicji funkcji. Nie wiem za pomocą czego i jak się nią komunikować.

0

Jeśli masz już bibliotekę to podpinasz ją do swojego projektu.
Dołączasz plik #include <sqlite3.h>

A jak komunikować się z bazą masz opisane w dokumentacji :

http://www.sqlite.org/c3ref/funclist.html

0

Aby się komunikować z bazą w bibliotece musze zdefiniować funkcje których będę używał ? Np.

  • sqlite3_open
  • sqlite3_close
  • sqlite3_create_collation
0

Nic nie definiujesz.

Funkcje te znajdują się w bibliotece, którą utworzyłeś i dołączyłeś do projektu.

Po to dodajesz plik :

#include "sqlite3.h"

w którym znajdują się deklaracje funkcji znajdujących się w bibliotece.

Dzięki plikowi nagłówkowemu #include "sqlite3.h" twoja aplikacja wie, jakich funkcji z biblioteki użyć.

0

Herk napisał :

Gdy już taki projekt utworzysz ( najlepiej pusty ) skopiuj do katalogu utworzonego projektu pliki, o których napisałem. Potem w środowisku w opcjach projektu dodaj odpowiednio dwa pliki *.c i *.h.

Zmieniłem kompilator Z VS na Dev bo ten pierwszy ciągle mi się wieszał i co 2 kompilacje musiałem go wyłanczać.

Udało mi się stworzyć biblioteke tylko mam problem z jej załączeniem.

0

W DevC++ robisz to tak

Project / Project Options

Zakładka Parametrs

Kolumna Linker

Add Library Or Object i tam dodajesz bibliotekę

0

Dzięki to juz działa :-), męczyłem się troche bo właczyłem sobie po polsku a tu zamiast kolumny linker - konsolidator . Po skąpilowaniu tych bibliotek i dodaniu ich, skopiowałem ten kod na dole ze strony :
http://www.sqlite.org/quickstart.html . I wyświetla mi "EOF in comment" nie rozumiem o co mu chodzi ? Koniec pliku w komentarzu :/ ?

0

Zrób nową linię po ostatniej klamrze.

0

Efekt ten sam.

0

Aż Dev-a zainstalowałem.

U mnie ładnie się skompilowało, bez błędów bez ostrzeżeń.

Tworzysz projekt dla C czy dla C++ ? ( wybierasz to w kreatorze projektu - prawy dolny róg )

Kod :

#include <stdio.h>
#include "sqlite3.h"

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
  int i;
  for(i=0; i<argc; i++){
    printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
  }
  printf("\n");
  return 0;
}

int main(int argc, char **argv){
  sqlite3 *db;
  char *zErrMsg = 0;
  int rc;

  if( argc!=3 ){
    fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    exit(1);
  }
  rc = sqlite3_open(argv[1], &db);
  if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    exit(1);
  }
  rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
  if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
  }
  sqlite3_close(db);
  
  system("PAUSE");
  return 0;
}

0

Dla C++. Przebudowałem cały projekt i są cały czas 2 błędy. "EOF in comment" i "Id returned 1 exit status" no i u sibie musze jeszcze dodać #include <stdlib.h> bo bez tego mi kupe błędów wywala.

0

Zrób projekt dla C nie dla C++.

Plik sqlite3.h dodaj do projektu w ten sposób #include "sqlite3.h" - tylko skopiuj go do katalogu projektu.

0

W końcu :-) już powoli myślałem ze to awykonalne... Tylko trzeba interfejs zrobić a to będzie trudniejsze niż sie spodziewałem... Do otwarcia bazy jest potrzebny argument i wskaźnik który trzeba przekazac przez wiersz poleceń ? Skoro agrv[] jest typu tablicowego to co bedzie pierwszym( zerowym) parametrem?

Powiedzmy że wiem co jest już pierwszym parametrem [wstyd] .

0

Chcesz zrobić aplikację okienkową czy wszystko spod konsoli ?

0

Na początek w konsoli może być. Myślełem że później wykożystam funkcje API. Próbowałem uruchomić plik wykonawczy z strony "sqlite'a" po kompilacji, potrzebuje on 2 argumentów do funkcji main, "nazwe bazy danych" i "adres" ?

Na stronie : http://www.sqlite.org/c3ref/prepare.html

jest napisane jekoś tak : "To execute an SQL query, it must first be compiled into a byte-code program using one of these routines. "

byte-code ? trzeba przekazać tablice znaków jako odpowiadające im wartości binarne kodu ASCII ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1