MYSQL connector

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
sachlj
Příspěvky: 89
Registrován: 10 pro 2020, 19:22
Reputation: 0

MYSQL connector

Příspěvek od sachlj » 11 led 2021, 09:19

Zdravím. Potřebuji pomoc s pochopením kódu. Potřebuji abych mohl použít knihovnu ale tak, že v jednom insertu odešlu více hodnot, tj 10 i více do různých polí databáze. Pole jsou pojmenované vím jak se jmenují. Hodnoty jsou proměnné vyčtené z různých senzorů. Tj, nemohu je do insertu zapsat jako faktickou stále stejnou hodnotu. Tady jsem našel nějaký návod ale moc z něho moudrý nejsem. Máte to někdo řešené? Poradíte jak na to? Návodů na to jak dostat data z jednoho senzoru je na netu hafo ale víc naráz v jednom insertu ne. Děkuji moc.
Neexistují hloupé otázky, existují jen hloupé odpovědi.
Chci aby "chytrá" elektronika dělala "chytré" a užitečné věci. Tím není aby nahrazovala něco co se dá hotové koupit za pár korun.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: MYSQL connector

Příspěvek od KamilV » 11 led 2021, 09:29

Syntaxe pro násobný insert je tam přímo uvedena:

Kód: Vybrat vše

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3), (4,5,6), (7,8,9);
Ukaž kód, ať vidíme, co nejde.

sachlj
Příspěvky: 89
Registrován: 10 pro 2020, 19:22
Reputation: 0

Re: MYSQL connector

Příspěvek od sachlj » 11 led 2021, 11:00

Jasan to si umím přečíst ale co se dává do těchto závorek (1,2,3), (4,5,6), (7,8,9) když jsou jen 3 v závorce (a,b,c)
a pak jak se zapisuje hodnota co vypočívá a jak se zapisuje jméno pole?

Kód: Vybrat vše

char query[162];
char INSERT_SQL[] = "INSERT INTO balkon.archive (dateTime,usUnits,interval, co2, extraHumid2,appTemp1,extraHumid1,pressure) VALUES (epochtime,16,5,%co2,%tovc,%teplota,%vlhkost,%tlak)";

    MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
        cur_mem->execute(query);
    
    delete cur_mem;
Neexistují hloupé otázky, existují jen hloupé odpovědi.
Chci aby "chytrá" elektronika dělala "chytré" a užitečné věci. Tím není aby nahrazovala něco co se dá hotové koupit za pár korun.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: MYSQL connector

Příspěvek od KamilV » 11 led 2021, 11:18

a,b,c jsou názvy sloupců.
Hodnoty v závorkách jsou pak jednotlivé řádky.
V příkladu:

Kód: Vybrat vše

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3), (4,5,6), (7,8,9);
tedy vznikne v tabulce:

Kód: Vybrat vše

|---|---|---|
| a | b | c |
|---|---|---|
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
|---|---|---|
Pokud je ve VALUES více n-tic v závorkách, vytvoří se více řádků v tabulce. Proto je ten insert násobný. Je to rychlejší, než volat insert pro každý řádek (pokud se u těch insertů nemění počet a pořadí sloupců).

sachlj
Příspěvky: 89
Registrován: 10 pro 2020, 19:22
Reputation: 0

Re: MYSQL connector

Příspěvek od sachlj » 11 led 2021, 12:21

Jak má tedy vypadat ten kód? Tahhle?

Kód: Vybrat vše

#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
char mysqluser[] = "xxxxxx";
char mysqlpassword[] = "yyyyyyyyy";
WiFiClient client;
MySQL_Connection conn((Client *)&client);

if (conn.connect(server_addr, 3306, mysqluser, mysqlpassword))
    Serial.println("OK.");
  else
    Serial.println("FAILED.");
char query[162];
char INSERT_SQL[] = "INSERT INTO balkon.archive (dateTime,usUnits,interval, co2, extraHumid2,appTemp1,extraHumid1,pressure) VALUES (epochtime,16,5,%co2,%tovc,%teplota,%vlhkost,%tlak)";
cur_mem->execute(INSERT_SQL);
delete cur_mem;
Serial.println("Data recorded.");
je to odesílání dat do weewx databáze z cjmcu-8128

někde tam mám chybu protože odpověď po serial je :
Error: 237 = You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'interval,co2,extraHumid2,appTemp1,extraHumid1,pressure) VALUES (epochtime,16,...' at line 1.
Neexistují hloupé otázky, existují jen hloupé odpovědi.
Chci aby "chytrá" elektronika dělala "chytré" a užitečné věci. Tím není aby nahrazovala něco co se dá hotové koupit za pár korun.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: MYSQL connector

Příspěvek od KamilV » 11 led 2021, 12:45

Interval je v SQL klíčové slovo, MySQL nepochopilo, že tím myslíš název sloupce. Pro tyto případě je potřeba název "obalit" zpětným apostrofem.
Tedy: `interval`, pro klid duše to samozřejmě můžeš udělat u všech sloupců:

Kód: Vybrat vše

INSERT INTO balkon.archive (`dateTime`, `usUnits`, `interval`, `co2`, `extraHumid2`, `appTemp1`, `extraHumid1`, `pressure`) VALUES ...

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: MYSQL connector

Příspěvek od KamilV » 11 led 2021, 12:48

Pak úplně nevím, co zamýšlíš konstrukcí:

Kód: Vybrat vše

(epochtime,16,5,%co2,%tovc,%teplota,%vlhkost,%tlak)
IMHO (ale knihovnu jsem nestudoval) se tam takto hodnoty nedosadí. Dle příkladu bys měl mít v dotazu jen placeholdery "%s" pro char, "%d" pro int... a pak tam pomocí sprintf() dosadit konkrétní hodnoty.

sachlj
Příspěvky: 89
Registrován: 10 pro 2020, 19:22
Reputation: 0

Re: MYSQL connector

Příspěvek od sachlj » 11 led 2021, 15:16

Zpětné apostrofry pomohli ale zase další chyba:

Kód: Vybrat vše

Error: 51 = Unknown column 'epochTime' in 'field list'.
Neexistují hloupé otázky, existují jen hloupé odpovědi.
Chci aby "chytrá" elektronika dělala "chytré" a užitečné věci. Tím není aby nahrazovala něco co se dá hotové koupit za pár korun.

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: MYSQL connector

Příspěvek od kiRRow » 11 led 2021, 16:27

Neznámý/neexistující sloupec v tabulce

sachlj
Příspěvky: 89
Registrován: 10 pro 2020, 19:22
Reputation: 0

Re: MYSQL connector

Příspěvek od sachlj » 11 led 2021, 17:10

tomu rozumím ale jak tam zadat data ? posílám celý kód. Jsou v něm ještě zbytky a smetí...není hotový..
SENZORY_OVZDUSI-v2.ino
(11.75 KiB) Staženo 116 x
Neexistují hloupé otázky, existují jen hloupé odpovědi.
Chci aby "chytrá" elektronika dělala "chytré" a užitečné věci. Tím není aby nahrazovala něco co se dá hotové koupit za pár korun.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů