贺公子之数据科学与艺术 2024-03-06 10:09 采纳率: 0%
浏览 10

Rust写入数据库的程序

Rust和设备交互通讯,将设备的数据写入数据库里面

use serialport::{DataBits, Parity, StopBits, SerialPortSettings, Error};
use rusqlite::{params, Connection, Result};
use std::io::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 连接到数据库
    let conn = Connection::open("data.db")?;
    conn.execute(
        "CREATE TABLE IF NOT EXISTS device_data (
            id INTEGER PRIMARY KEY,
            data TEXT
        )",
        params![],
    )?;

    // 配置串口参数
    let mut settings = SerialPortSettings::default();
    settings.baud_rate = 9600;
    settings.data_bits = DataBits::Eight;
    settings.parity = Parity::None;
    settings.stop_bits = StopBits::One;

    // 打开串口
    let port = serialport::open("/dev/ttyUSB0")?;
    port.set_timeout(std::time::Duration::from_millis(1000))?;
    port.configure(&settings)?;

    // 读取设备数据并写入数据库
    let mut buffer: Vec<u8> = vec![0; 1024];
    loop {
        match port.read(buffer.as_mut_slice()) {
            Ok(t) => {
                if t > 0 {
                    let data = String::from_utf8_lossy(&buffer[..t]);
                    println!("Received data: {}", data);

                    // 将数据写入数据库
                    conn.execute(
                        "INSERT INTO device_data (data) VALUES (?1)",
                        params![data],
                    )?;
                }
            }
            Err(ref e) if e.kind() == ErrorKind::Timeout => (),
            Err(e) => eprintln!("{:?}", e),
        }
    }
}
  • 写回答

5条回答 默认 最新

  • 百锦再@新空间代码工作室 全栈领域优质创作者 2024-03-06 10:09
    关注

    use std::result::Result;
    use std::boxed::Box;

    use serialport::{DataBits, Parity, StopBits, SerialPortSettings, Error};
    use rusqlite::{Connection, params};
    use std::io::prelude::*;

    fn main() ->
    Result<
    (), Box<
    dyn std::error::Error>
    >
    {// Connect to the databaselet conn = Connection::open("
    data.db"
    )?;
    conn.execute("
    CREATE TABLE IF NOT EXISTS device_data (id INTEGER PRIMARY KEY,data TEXT)"
    , [])?;

    // Configure serial port parameterslet mut settings = SerialPortSettings::default();
    settings.baud_rate = 9600;
    settings.data_bits = DataBits::Eight;
    settings.parity = Parity::None;
    settings.stop_bits = StopBits::One;

    // Open the serial portlet mut port = serialport::open("
    /dev/ttyUSB0"
    )?;
    port.set_timeout(std::time::Duration::from_millis(1000))?;
    port.set_settings(&
    settings)?;

    let mut buffer = Vec::<
    u8>
    ::with_capacity(1024);
    loop {match port.read(buffer.as_mut_slice()) {Ok(t) if t >
    0 =>
    {let data = String::from_utf8_lossy(&
    buffer[..t]);
    println!("
    Received data: {}"
    , data);
    // Write data to the databaseconn.execute("
    INSERT INTO device_data (data) VALUES (?1)"
    , params![data])?;
    }Err(ref e) if e.kind() == ErrorKind::Timeout =>
    (),Err(e) =>
    eprintln!("
    {}"
    , e),}}}

    在此Rust代码示例中,通过串口与设备进行数据交互,并将接收到的设备数据写入到SQLite数据库中。首先连接到数据库,然后配置串口参数并打开串口。随后循环读取串口数据,将数据转换为字符串并打印出来,然后将数据插入到数据库中。


    有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
    评论

报告相同问题?

问题事件

  • 创建了问题 3月6日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀