rust - 如何使用 rusqlite 在 sqlite 数据库中插入和获取日期?
问题描述
我有一个带有 NaiveDate 字段的结构,我想将此字段插入到表中。这是我的全部代码
use chrono::naive::NaiveDate;
use rusqlite::{params, Connection, Result};
#[derive(Debug)]
struct Person {
id: i32,
name: String,
date: NaiveDate,
}
fn main()->Result<()>{
let date_str = "2020-04-12";
let naive_date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d").unwrap();
let me = Person {
id: 0,
name: "Steven".to_string(),
date: naive_date,
};
println!("{:?}",me);
let conn = Connection::open_in_memory()?;
conn.execute(
"CREATE TABLE person (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
date TEXT
)",
[],
)?;
conn.execute(
"INSERT INTO person (name, date) VALUES (?1, ?2)",
params![me.name, me.date],
)?;
let mut stmt = conn.prepare("SELECT id, name, date FROM person")?;
let person_iter = stmt.query_map([], |row| {
Ok(Person {
id: row.get(0)?,
name: row.get(1)?,
date: row.get(2)?,
})
})?;
for person in person_iter {
println!("Found person {:?}", person.unwrap());
}
Ok(())
}
但它给出了这两个错误
| the trait `FromSql` is not implemented for `NaiveDate`
| the trait `ToSql` is not implemented for `NaiveDate`
货物.toml
chrono = "0.4.19"
rusqlite = "0.25.0"
解决方案
您必须使用附加的 chrono 功能进行编译,才能为 chrono 类型实现FromSql
和特征。ToSql
将 Cargo.toml 中的声明更改为
chrono = "0.4.19"
rusqlite = { version = "0.25.0", features = ["chrono"] }
推荐阅读
- sql-server - SQL-Server 新手,如何修复 msg 8169 错误?
- entity-framework - 数据迁移 - 实体框架
- git - 如何将 GIT 与 Pega 一起使用?
- angular - 错误:找不到“object”类型的不同支持对象“[object Object]”
- javascript - 如何显示特定类别的所有帖子
- r - 根据条件获取上个月的平均值
- reactjs - 传递给子函数的函数被解释为字符串
- c# - PdfDocumentOpenMode.Import - 导入 pdf 的问题
- algorithm - 基于特定标准在多维数组中寻找最佳组合的算法
- google-chrome - 如何检测到设备更改为笔记本电脑上未插入的耳机 - chrome