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 } }