|
本帖最后由 忙碌的死龙 于 2023-9-12 18:48 编辑
一、编译SQLite3
1.1 注意事项
交叉编译 SQLite3 时需要注意以下事项: 目标架构:确定您要交叉编译的目标架构,例如 ARM、MIPS、x86 等。确保您有适用于目标架构的交叉编译工具链。 交叉编译工具链:安装和配置适用于目标架构的交叉编译工具链。这通常包括交叉编译器、交叉编译库和交叉编译链接器。您可能需要从硬件供应商或开发社区获取工具链。 目标操作系统:了解您的目标操作系统,包括版本和配置。SQLite3 的编译选项可能会受到目标操作系统的影响。 编译选项:根据目标架构和操作系统配置适当的编译选项。SQLite 提供了一些编译宏,您可以根据需要启用或禁用它们,以定制 SQLite 的行为。 交叉编译命令:使用正确的交叉编译命令来编译 SQLite3。这通常涉及设置适当的环境变量和编译选项,以确保编译器和链接器能够正确识别目标架构和操作系统。 库依赖项:确保您的交叉编译环境中存在任何必要的库依赖项,这些库可能在 SQLite3 编译过程中需要链接。
交叉编译是一个复杂的过程,需要谨慎处理。
1.2 下载源码
在Sqlite官网可以找到下载链接,这里我们使用最新版本的,下载地址为https://www.sqlite.org/2023/sqlite-autoconf-3430100.tar.gz
在Ubuntu上执行以下命令下载
- wget https://www.sqlite.org/2023/sqlite-autoconf-3430100.tar.gz -O sqlite.tar.gz
复制代码 1.3 配置工具链路径
解压缩官方提供的工具链sdk包并安装后,可以使用命令激活环境工具链,然后就可以直接使用aarch64-poky-linux-gcc来调用了。
- unset LD_LIBRARY_PATH && . /mnt/MyNAS/walker/IoT/Linux/myir/environment-setup-aarch64-poky-linux
复制代码 测试能检测到编译器
1.4 确认编译选项
大多数情况下,使用默认编译选项可以很好地构建 SQLite。由于我们是在X86平台上编译,需要指定编译工具链和编译的平台。
所以编译选项配置为ARCH=aarch64 --host=x86_64
1.5 开始编译
解压缩sqlite3源码包
创建build目录
切换到build目录
配置并编译sqlite,经测试不需要指定CC变量就可以正常编译
- ../configure ARCH=aarch64 --host=x86_64
复制代码 编译完成后,目录下就出现sqlite3可执行程序了。
1.6 上传到开发板进行测试
- scp sqlite3 walker@192.168.50.82:~/.bin/
复制代码 二、生成初始数据库表
- <blockquote>CREATE TABLE [weathers] (
复制代码 其实在Golang代码里,也可以自动生成对应的数据库表单。
三、使用Golang获取天气信息并存储到数据库
要使用 Golang 获取天气信息并将其存储到 SQLite 数据库中,您可以按照以下步骤操作:
3.1 安装依赖:
在开始之前,确保已经安装了 Golang 和 GORM。您可以使用以下命令安装 GORM:
- go get -u github.com/go-gorm/gorm
- go get -u github.com/mattn/go-sqlite3
复制代码
3.2 创建数据库模型:
创建一个包含天气信息的数据库模型。
3.3 连接到数据库:
使用 GORM 连接到 SQLite 数据库并自动创建数据库表。
3.4 获取天气信息:
- func getWether(city, key string) Weather {
- // 创建http.Client对象
- client := &http.Client{}
- host_url := "https://restapi.amap.com/v3/weather/weatherInfo?city=" + city + "&key=" + key
- // 创建HTTP请求
- req, err := http.NewRequest("GET", host_url, nil)
- if err != nil {
- panic(err)
- }
- // 发送HTTP请求
- resp, err := client.Do(req)
- if err != nil {
- panic(err)
- }
- // 处理HTTP响应
- defer resp.Body.Close()
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- panic(err)
- }
- var data map[string]interface{}
- if err := json.Unmarshal(body, &data); err != nil {
- panic("无法解析 JSON 数据:" + err.Error())
- }
- temp, ok := data["lives"].([]interface{})[0].(map[string]interface{})
- if !ok {
- panic("获取天气数据:" + err.Error())
- }
- var rel Weather
- rel.City = temp["city"].(string)
- rel.Condition = temp["weather"].(string)
- t, _ := strconv.ParseFloat(temp["temperature_float"].(string), 64)
- rel.Temperature = float32(t)
- h, _ := strconv.ParseFloat(temp["humidity_float"].(string), 64)
- rel.Humidity = float32(h)
- rel.Winddirection = temp["winddirection"].(string)
- rel.Windstrength = temp["windpower"].(string)
- rel.Reporttime = temp["reporttime"].(string)
- return rel
- }
复制代码 这里使用高德的天气获取API,获取到天气的json数据后,转换成对应属性赋值给Weather实例,然后回传给调用者。
3.5 将天气信息存储到数据库:
使用 GORM 将获取的天气信息存储到数据库中。例如:
3.6 查询和操作数据:
可以使用 GORM 查询和操作数据库中的数据。例如,可以检索特定城市的天气信息:
- db.Where("city = ?", "玉林市").First(&result)
复制代码 3.7 测试:
运行代码进行测试(go run main.go),可以看到sqlite数据库文件里增加了新的内容
这些步骤提供了一个基本的框架,用于使用 Golang 和 GORM 获取天气信息并将其存储到 SQLite 数据库中。后面会根据实际需求进行进一步的定制和扩展。
|
|