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
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
Potrzebujesz użyć technologie dostępu do baz danych, np. ado lub zeos.
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.
Herk napisał
Potem już tylko łączysz się z bazą
Jest jakaś inna możliwość niż połączenie sieciowe z serwerem baz danych ?
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.
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++ ?
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 :-)
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" ?
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ć :-)
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> :-)
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.
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ć.
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 :
Aby się komunikować z bazą w bibliotece musze zdefiniować funkcje których będę używał ? Np.
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ć.
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.
W DevC++ robisz to tak
Project / Project Options
Zakładka Parametrs
Kolumna Linker
Add Library Or Object i tam dodajesz bibliotekę
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 :/ ?
Zrób nową linię po ostatniej klamrze.
Efekt ten sam.
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;
}
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.
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.
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] .
Chcesz zrobić aplikację okienkową czy wszystko spod konsoli ?
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 ?