go_rain_dtu/database.go
2025-04-24 14:44:30 +08:00

75 lines
1.8 KiB
Go

package main
import (
"database/sql"
"os"
)
var db *sql.DB
// 初始化数据库
func initDB() {
var err error
if err := os.MkdirAll("data", 0755); err != nil {
logger.Fatalf("创建数据目录失败: %v", err)
}
db, err = sql.Open("sqlite", "data/sensor.db")
if err != nil {
logger.Fatalf("打开数据库错误: %v", err)
}
// 创建数据表
createTableSQL := `CREATE TABLE IF NOT EXISTS sensor_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME NOT NULL,
wind_speed INTEGER,
wind_force INTEGER,
wind_direction8 INTEGER,
wind_direction360 INTEGER,
humidity INTEGER,
temperature INTEGER,
noise INTEGER,
pm25 INTEGER,
pm10 INTEGER,
atm_pressure INTEGER,
lux20wh INTEGER,
lux20wl INTEGER,
light20w INTEGER,
optical_rain INTEGER,
compass_angle INTEGER,
solar_radiation INTEGER
);`
_, err = db.Exec(createTableSQL)
if err != nil {
logger.Fatalf("创建表错误: %v", err)
}
}
// 保存传感器数据到数据库
func saveSensorData(data SensorData) {
stmt, err := db.Prepare(`INSERT INTO sensor_data (
timestamp, wind_speed, wind_force, wind_direction8, wind_direction360,
humidity, temperature, noise, pm25, pm10, atm_pressure,
lux20wh, lux20wl, light20w, optical_rain, compass_angle, solar_radiation
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
if err != nil {
logger.Printf("准备SQL语句错误: %v", err)
return
}
defer stmt.Close()
_, err = stmt.Exec(
data.Timestamp, data.WindSpeed, data.WindForce, data.WindDirection8, data.WindDirection360,
data.Humidity, data.Temperature, data.Noise, data.PM25, data.PM10, data.AtmPressure,
data.Lux20WH, data.Lux20WL, data.Light20W, data.OpticalRain, data.CompassAngle, data.SolarRadiation,
)
if err != nil {
logger.Printf("保存数据错误: %v", err)
return
}
}