Stránka 1 z 2

MYSQL connector

Napsal: 11 led 2021, 09:19
od sachlj
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.

Re: MYSQL connector

Napsal: 11 led 2021, 09:29
od KamilV
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.

Re: MYSQL connector

Napsal: 11 led 2021, 11:00
od sachlj
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;

Re: MYSQL connector

Napsal: 11 led 2021, 11:18
od KamilV
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ů).

Re: MYSQL connector

Napsal: 11 led 2021, 12:21
od sachlj
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.

Re: MYSQL connector

Napsal: 11 led 2021, 12:45
od KamilV
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 ...

Re: MYSQL connector

Napsal: 11 led 2021, 12:48
od KamilV
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.

Re: MYSQL connector

Napsal: 11 led 2021, 15:16
od sachlj
Zpětné apostrofry pomohli ale zase další chyba:

Kód: Vybrat vše

Error: 51 = Unknown column 'epochTime' in 'field list'.

Re: MYSQL connector

Napsal: 11 led 2021, 16:27
od kiRRow
Neznámý/neexistující sloupec v tabulce

Re: MYSQL connector

Napsal: 11 led 2021, 17:10
od sachlj
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 118 x