-
Notifications
You must be signed in to change notification settings - Fork 74
/
Copy pathsqlite3_sdspi.ino
112 lines (101 loc) · 2.69 KB
/
sqlite3_sdspi.ino
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
This example opens Sqlite3 databases from SD Card and
retrieves data from them.
Before running please copy following files to SD Card:
examples/sqlite3_sdmmc/data/mdr512.db
examples/sqlite3_sdmmc/data/census2000names.db
Connections:
* SD Card | ESP32
* DAT2 -
* DAT3 SS (D5)
* CMD MOSI (D23)
* VSS GND
* VDD 3.3V
* CLK SCK (D18)
* DAT0 MISO (D19)
* DAT1 -
*/
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <SPI.h>
#include <FS.h>
#include "SD.h"
const char* data = "Callback function called";
static int callback(void *data, int argc, char **argv, char **azColName){
int i;
Serial.printf("%s: ", (const char*)data);
for (i = 0; i<argc; i++){
Serial.printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
Serial.printf("\n");
return 0;
}
int openDb(const char *filename, sqlite3 **db) {
int rc = sqlite3_open(filename, db);
if (rc) {
Serial.printf("Can't open database: %s\n", sqlite3_errmsg(*db));
return rc;
} else {
Serial.printf("Opened database successfully\n");
}
return rc;
}
char *zErrMsg = 0;
int db_exec(sqlite3 *db, const char *sql) {
Serial.println(sql);
long start = micros();
int rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
if (rc != SQLITE_OK) {
Serial.printf("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
Serial.printf("Operation done successfully\n");
}
Serial.print(F("Time taken:"));
Serial.println(micros()-start);
return rc;
}
void setup() {
Serial.begin(115200);
sqlite3 *db1;
sqlite3 *db2;
char *zErrMsg = 0;
int rc;
SPI.begin();
SD.begin();
sqlite3_initialize();
// Open database 1
if (openDb("/sd/census2000names.db", &db1))
return;
if (openDb("/sd/mdr512.db", &db2))
return;
rc = db_exec(db1, "Select * from surnames where name = 'MICHELLE'");
if (rc != SQLITE_OK) {
sqlite3_close(db1);
sqlite3_close(db2);
return;
}
rc = db_exec(db2, "Select * from domain_rank where domain between 'google.com' and 'google.com.z'");
if (rc != SQLITE_OK) {
sqlite3_close(db1);
sqlite3_close(db2);
return;
}
rc = db_exec(db1, "Select * from surnames where name = 'SPRINGER'");
if (rc != SQLITE_OK) {
sqlite3_close(db1);
sqlite3_close(db2);
return;
}
rc = db_exec(db2, "Select * from domain_rank where domain = 'zoho.com'");
if (rc != SQLITE_OK) {
sqlite3_close(db1);
sqlite3_close(db2);
return;
}
sqlite3_close(db1);
sqlite3_close(db2);
}
void loop() {
}