Witaj szanowny Gościu na forum Odjechani.com.pl. Serdecznie zachęcamy do rejestracji. Tylko u nas tak przyjazna atmosfera. Kliknij tutaj, aby się zarejestrować i dołączyć do grona Odjechanych!

Strona odjechani.com.pl może przechowywać Twoje dane osobowe, które w niej zamieścisz po zarejestrowaniu konta. Odjechani.com.pl wykorzystuje również pliki cookies (ciasteczka), odwiedzając ją wyrażasz zgodę na ich wykorzystanie oraz rejestrując konto wyrażasz zgodę na przetwarzanie swoich danych osobowych w ramach funkcjonowania serwisu. Więcej informacji znajdziesz w naszej polityce prywatności. Pozdrawiamy!


Moje niewielkie kody.
#11
Program napisany w czystym C służący do przetestowania Sqlite3.
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

static int showResult(void *x, int argc, char** argv, char** col)
{
    for(int i = 0; i < argc; ++i)
        printf("%s ", argv[i]);
    printf("\n");
    return 0;
}

void makeQuery(char *query)
{
    sqlite3 *db;
    char *errorMessage = 0;
    if(sqlite3_open("simplyDataBase.db", &db) != SQLITE_OK)
    {
        fprintf(stderr, "%s", sqlite3_errmsg(db));
        return;
    }
    int result = sqlite3_exec(db, query, showResult, 0, &errorMessage);
    if(result != SQLITE_OK)
    {
        fprintf(stderr, "%s\n", errorMessage);
        sqlite3_free(errorMessage);
        return;
    }
    sqlite3_close(db);
    printf("\n");
}
void showMenu()
{
    printf("0 - Pokaz menu.\n"
           "1 - Dodaj osobe.\n"
           "2 - Dodaj przedmiot.\n"
           "3 - Dodaj przydzial.\n"
           "4 - Usun osobe.\n"
           "5 - Usun przedmiot.\n"
           "6 - Usun przydzial.\n"
           "7 - Pokaz osoby.\n"
           "8 - Pokaz przedmioty.\n"
           "9 - Pokaz przydzialy.\n"
           "a - Pokaz dokladne przydzialy.\n"
           "b - Wyjscie.\n"
           "c - Pokaz przedmioty danej osoby.\n"
           "d - Pokaz osoby posiadajace dany przedmiot.\n"
           );
}
int main()
{
    char *start =
            "CREATE TABLE IF NOT EXISTS `osoby` (\
              `idOsoby` int(11) NOT NULL,\
              `nazwisko` text NOT NULL\
            );\
            CREATE TABLE IF NOT EXISTS `przedmioty` (\
              `idPrzedmiotu` int(11) NOT NULL,\
              `nazwa` text NOT NULL\
            );\
            CREATE TABLE IF NOT EXISTS `przydzialy` (\
              `idOsoby` int(11) NOT NULL,\
              `idPrzedmiotu` int(11) NOT NULL,\
              `idPrzydzialu` int(11) NOT NULL\
            );";
    makeQuery(start);
    showMenu();
    char option = 0, *query, *arg1, *arg2, *arg3;
    for(;;)
    {
        printf("Podaj opcje: ");
        while ((option = getchar()) != '\n' && option != EOF)
	{
		switch (option)
		{
		case '0':
		    showMenu();
		    break;
		case '1':
		    query = (char*)calloc(1024, sizeof(char));
		    arg1 = (char*)calloc(1024, sizeof(char));
		    arg2 = (char*)calloc(1024, sizeof(char));
		    printf("Podaj id osoby: ");
		    scanf("%s", arg1);
		    printf("Podaj nazwisko osoby: ");
		    scanf("%s", arg2);
		    snprintf(query, sizeof(char) * 1024, "INSERT INTO osoby(idOsoby, nazwisko) VALUES (%s, \'%s\');", arg1, arg2);
		    makeQuery(query);
		    free(query);
		    free(arg1);
		    free(arg2);
		    break;
		case '2':
		    query = (char*)calloc(1024, sizeof(char));
		    arg1 = (char*)calloc(1024, sizeof(char));
		    arg2 = (char*)calloc(1024, sizeof(char));
		    printf("Podaj id przedmiotu: ");
		    scanf("%s", arg1);
		    printf("Podaj nazwe przedmiotu: ");
		    scanf("%s", arg2);
		    snprintf(query, sizeof(char) * 1024, "INSERT INTO przedmioty(idPrzedmiotu, nazwa) VALUES (%s, \'%s\');", arg1, arg2);
		    makeQuery(query);
		    free(query);
		    free(arg1);
		    free(arg2);
		    break;
		case '3':
		    query = (char*)calloc(1024, sizeof(char));
		    arg1 = (char*)calloc(1024, sizeof(char));
		    arg2 = (char*)calloc(1024, sizeof(char));
		    arg3 = (char*)calloc(1024, sizeof(char));
		    printf("Podaj id osoby: ");
		    scanf("%s", arg1);
		    printf("Podaj id przedmiotu: ");
		    scanf("%s", arg2);
		    printf("Podaj id przydzialu: ");
		    scanf("%s", arg3);
		    snprintf(query, sizeof(char) * 1024, "INSERT INTO przydzialy(idOsoby, idPrzedmiotu, idPrzydzialu) VALUES (%s, %s, %s);", arg1, arg2, arg3);
		    makeQuery(query);
		    free(query);
		    free(arg1);
		    free(arg2);
		    free(arg3);
		    break;
		case '4':
		    query = (char*)calloc(1024, sizeof(char));
		    arg1 = (char*)calloc(1024, sizeof(char));
		    printf("Podaj id osoby: ");
		    scanf("%s", arg1);
		    snprintf(query, sizeof(char) * 1024, "DELETE FROM osoby WHERE idOsoby=%s;", arg1);
		    makeQuery(query);
		    free(query);
		    free(arg1);
		    break;
		case '5':
		    query = (char*)calloc(1024, sizeof(char));
		    arg1 = (char*)calloc(1024, sizeof(char));
		    printf("Podaj id przedmiotu: ");
		    scanf("%s", arg1);
		    snprintf(query, sizeof(char) * 1024, "DELETE FROM przedmioty WHERE idPrzedmiotu=%s;", arg1);
		    makeQuery(query);
		    free(query);
		    free(arg1);
		    break;
		case '6':
		    query = (char*)calloc(1024, sizeof(char));
		    arg1 = (char*)calloc(1024, sizeof(char));
		    printf("Podaj id przydzialu: ");
		    scanf("%s", arg1);
		    snprintf(query, sizeof(char) * 1024, "DELETE FROM przydzialy WHERE idPrzydzialu=%s;", arg1);
		    makeQuery(query);
		    free(query);
		    free(arg1);
		    break;
		case '7':
		    makeQuery("SELECT * FROM osoby;");
		    break;
		case '8':
		    makeQuery("SELECT * FROM przedmioty;");
		    break;
		case '9':
		    makeQuery("SELECT * FROM przydzialy;");
		    break;
		case 'a':
		    makeQuery("SELECT idprzydzialu, osoby.nazwisko, przedmioty.nazwa FROM przydzialy INNER JOIN osoby ON osoby.idOsoby = przydzialy.idOsoby INNER JOIN przedmioty on przedmioty.idPrzedmiotu = przydzialy.idPrzedmiotu;");
		    break;
		case 'b':
		    return 0;
		    break;
		case 'c':
		    query = (char*)calloc(1024, sizeof(char));
		    arg1 = (char*)calloc(1024, sizeof(char));
		    printf("Podaj nazwisko osoby: ");
		    scanf("%s", arg1);
		    snprintf(query, sizeof(char) * 1024, "SELECT przedmioty.nazwa FROM przydzialy INNER JOIN osoby ON osoby.idOsoby = przydzialy.idOsoby INNER JOIN przedmioty on przedmioty.idPrzedmiotu = przydzialy.idPrzedmiotu WHERE osoby.nazwisko=\'%s\';", arg1);
		    makeQuery(query);
		    free(query);
		    free(arg1);
		    break;
		case 'd':
		    query = (char*)calloc(1024, sizeof(char));
		    arg1 = (char*)calloc(1024, sizeof(char));
		    printf("Podaj nazwe przedmiotu: ");
		    scanf("%s", arg1);
		    snprintf(query, sizeof(char) * 1024, "SELECT osoby.nazwisko FROM przydzialy INNER JOIN osoby ON osoby.idOsoby = przydzialy.idOsoby INNER JOIN przedmioty on przedmioty.idPrzedmiotu = przydzialy.idPrzedmiotu WHERE przedmioty.nazwa=\'%s\';", arg1);
		    makeQuery(query);
		    free(query);
		    free(arg1);
		    break;
		default:
		    printf("Brak takiej opcji w menu.\n");
		    break;
		}
	}
    }
    return 0;
}
Czynności potrzebne do skompilowania programu pod systemem Ubuntu 18.04 LTS:
sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev
gcc -o3 ./nazwa_pliku_zrodlowego.c -o nazwa_pliku_wykonywalnego -lsqlite3
  Odpowiedz
#12
Działa bardzo sprawnie, nie jest jedynie zabezpieczone przed wprowadzeniem znaku ' , który powoduje luki i błędy w zapytaniach, jednak jeśli to program tylko do testów to raczej nie stwarza to zagrożenia.


  Odpowiedz
#13
Robotox Program ten napisałem tylko po to, aby lepiej poduczyć się używania baz danych w swoich programach. Ostatnio na rozmowie rekrutacyjnej pytano się mnie czy robiłem programy łączące się z bazą danych, więc pomyślałem, że warto temu poświęcić trochę więcej uwagi niż dotychczas.
  Odpowiedz


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Arduino - moje początki Dominik 2 367 02.03.2017, 18:35
Ostatni post: Dominik
  Początki z językiem C (kody, sugestie) Suicider 35 1 534 10.11.2016, 19:07
Ostatni post: amb00

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości