Query MySQL

Arduino specifieke Software
Berichten: 10
Geregistreerd: 06 Jan 2016, 20:05

Query MySQL

Berichtdoor ArduinoMega123 » 09 Mrt 2016, 20:46

Beste


Ben niet echter zeker of de vraag hier thuis hoort, maar ga het er toch op wagen.

Mijn vraag is echt de volgende: "Lukt het om een variable mee te geven in een query vanuit Arduino naar mySQL?"



Tot nu toe kan ik met onderstaande query getallen doorsturen naar mijn database.

INSERT INTO `mijn_Database`.`mijn_Tabel` (`Kaartnr`,`Tagnummer`,`Registratie`) VALUES ('11111111','123', CURRENT_TIMESTAMP)



De bedoeling is echter dat ik een int kan aanmaken en deze dan kan gebruiken in mijn query.

bv:

int mijn_Getal =5;

INSERT INTO `mijn_Database`.`mijn_Tabel` (`Kaartnr`,`Tagnummer`,`Registratie`) VALUES ('11111111',mijn_Getal, CURRENT_TIMESTAMP)



Dit lukt niet, iemand enig idee hoe dit komt?



MVG

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Query MySQL

Berichtdoor nicoverduin » 09 Mrt 2016, 21:18

sprintf() gebruiken. Zal het zo erbij zetten.

test programma
cpp code
char sqlQueryString[200];
void setup()
{
Serial.begin(9600);
uint16_t mijnGetal = 3123;
sprintf(sqlQueryString, "INSERT INTO `mijn_Database`.`mijn_Tabel` (`Kaartnr`,`Tagnummer`,`Registratie`) VALUES ('11111111','%d', CURRENT_TIMESTAMP)", mijnGetal);
Serial.println(sqlQueryString);
}

// The loop function is called in an endless loop
void loop()
{
//Add your repeated code here
}


Resultaat
cpp code
INSERT INTO `mijn_Database`.`mijn_Tabel` (`Kaartnr`,`Tagnummer`,`Registratie`) VALUES ('11111111','3123', CURRENT_TIMESTAMP)


Door die %d begrijpt de functie dat er een decimaal getal op die plek moet komen en dat is de variabele na de string.

als je te weinig RAM hebt kun je deze code toepassen
cpp code
//
// teksten die we niet nodig hebben in het flash geheugen zetten
//
const char queryString1[] PROGMEM = "INSERT INTO `mijn_Database`.`mijn_Tabel` (`Kaartnr`,`Tagnummer`,`Registratie`) VALUES ('11111111','%d', CURRENT_TIMESTAMP)";
//
// buffer voor het eind resultaat
//
char sqlQueryString[200];
void setup()
{
Serial.begin(9600);
uint16_t mijnGetal = 3123;
//
// bouw de formatted string op door de format uit flash te gebruiken
//
sprintf_P(sqlQueryString, queryString1, mijnGetal);

Serial.println(sqlQueryString);
}

// The loop function is called in an endless loop
void loop()
{
//Add your repeated code here
}


kon het niet laten. Nog ff zuiniger met geheugen :mrgreen:
Hier wordt de querystring zelf ook nog gealloceerd om hem op te bouwen en net zo hard weer op te ruimen als je hem niet meer nodig gebruikt. Het programma gebruikt nu nog 654 bytes ram omdat die nodig zijn voor de Serial buffer. Verder wordt alles netjes opgeruimd als het niet nodig is.

cpp code
//
// teksten die we niet nodig hebben in het flash geheugen zetten
//
const char queryString1[] PROGMEM = "INSERT INTO `mijn_Database`.`mijn_Tabel` (`Kaartnr`,`Tagnummer`,`Registratie`) VALUES ('11111111','%d', CURRENT_TIMESTAMP)";
//
// buffer voor het eind resultaat
//
void setup()
{
Serial.begin(9600);
}

// The loop function is called in an endless loop
void loop()
{
uint16_t mijnGetal = 3123;
//
// alloceer een tijdelijke buffer
//
char *sqlQueryString = (char *)malloc((strlen_P(queryString1) + 1) * sizeof(char));
//
// bouw de formatted string op door de format uit flash te gebruiken
//
sprintf_P(sqlQueryString, queryString1, mijnGetal);
Serial.println(sqlQueryString);
//
// buffertje weer vrijgeven
//
free (sqlQueryString);
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 87 gasten