Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C++] SQLite data ophalen naar variabele array?

Pagina: 1
Acties:

  • honda4life
  • Registratie: Januari 2007
  • Laatst online: 22:22
Hallo iedereen,

In mijn vrije tijd durf ik wel eens aan de slag gaan met programmeren, ik ben alles behalve een gevorderde programmeur, maar ik weet aardig m'n plan te trekken.

Ik ben er reeds in geslaagd m'n data te stockeren in een SQLite database.
Deze er op een goede manier uithalen, is een ander paar mouwen.
Momenteel heb ik het onderstaande werkende. Het zou mooi zijn dat deze functie deze data ook nog terug kan geven onder de vorm van een array, die zichzelf aanpast aan het aantal kolommen en het aantal rijen van de uitgevoerde query.
Alle suggesties zijn welkom hoe ik dit op een mooie manier kan doen, want dit gaat een beetje m'n petje te boven.


Bedankt!

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
int ReturnQuery(char *query)
{
    sqlite3_stmt *statement;
    int result;

    printf("ReturnQuery: %s\n", query);
    result = sqlite3_prepare_v2(dbHandle, query, -1, &statement, NULL);
    if(result != SQLITE_OK)
    {
        printf("Cannot prepare query: %s\n", sqlite3_errmsg(dbHandle));
        return -1;
    }

    int columns = sqlite3_column_count(statement);
    printf("Columns: %i\n", columns);

    while(1)
    {
        result = sqlite3_step(statement);
        if(result == SQLITE_ROW)
        {
            for(int column = 0; column < columns; column++)
            {
                char *value = (char*)sqlite3_column_text(statement, column);
                printf("%s = %s\t", sqlite3_column_name(statement,column), value);
            }
            printf("\n");
        }
        else if(result == SQLITE_DONE)
        {
            printf("All rows fetched\n");
            sqlite3_finalize(statement);
            break;
        }
        else
        {
            printf("Some error encountered: %s\n", sqlite3_errmsg(dbHandle));
            return -1;
        }
    }
    return 0;
}

  • xos
  • Registratie: Januari 2002
  • Laatst online: 22-11 09:52

xos

Daar zijn verschillende methodes voor, een manier is om je database records naar een class/struct om te zetten en deze aan een collectie toe te voegen. Via een zoekmachine zijn er aardig wat tutorials over collecties te vinden die je verder kunnen helpen.

Verder *vermoed* ik (ken sqlite lib verder niet) dat je een resource leak hebt in geval sqlite3_step iets anders terug geeft dan SQLITE_ROW of SQLITE_DONE. Waarschijnlijk moet je in de else clausule ook sqlite3_finalize aanroepen.

  • honda4life
  • Registratie: Januari 2007
  • Laatst online: 22:22
Sorry maar dat begrijp ik (nog) niet 8)7

  • joppybt
  • Registratie: December 2002
  • Laatst online: 23:29
Gooi het eens over een ander boeg: waarom wil je de data opslaan in een array?

In mijn ervaring ben je bijna altijd beter af om de data gewoon in de database te laten zitten. Eventuele manipulaties (bijvoorbeeld: een listbox aanmaken) kun je veel beter doen direct tijdens het lezen uit de database. Direct daarna heb je je record niet meer nodig.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
honda4life schreef op zaterdag 26 januari 2013 @ 18:05:
Sorry maar dat begrijp ik (nog) niet 8)7
Het is wel handig als je aangeeft wát je dan niet begrijpt 8)7 Je kunt niet van ons verwachten een complete handleiding te schrijven. Daar is documentatie voor uitgevonden ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
joppybt schreef op zondag 27 januari 2013 @ 11:32:
Gooi het eens over een ander boeg: waarom wil je de data opslaan in een array?
Ik hoop dat het is vanwege separation of concerns...

Als jij een MVC model of een templating engine gebruikt dan wil je niet dat je view/template rechtstreeks uit je db zit te lezen.

In principe kan ik me juist weer geen serieuze situatie voorstellen dat je het niet nodig hebt... Component A moet de data ophalen, component C moet de data tonen, dan moet er ergens iets tussen A en C gaan.

  • honda4life
  • Registratie: Januari 2007
  • Laatst online: 22:22
Dus als ik het goed begrijp is de beste oplossing deze loop telkens herhalen waar ik een query wil uitvoeren ipv dit "netjes" in een functie te plaatsen?
Pagina: 1