use rusqlite::{params, Connection, Result}; use time::Timespec; #[derive(Debug)] struct Person { id: i32, name: String, time_created: Timespec, memo: String, } fn main() -> Result<()> { let conn = Connection::open_in_memory()?; conn.execute( r#"CREATE TABLE person ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, time_created TEXT NOT NULL, memo TEXT NOT NULL )"#, params![], )?; let me = Person { id: 0, name: "Steven".to_owned(), time_created: time::get_time(), memo: "memo...".to_owned(), }; conn.execute( "INSERT INTO person (name, time_created, memo) VALUES (?1, ?2, ?3)", params![me.name, me.time_created, me.memo], )?; let mut stmt = conn.prepare("SELECT id, name, time_created, memo FROM person")?; let person_iter = stmt.query_map(params![], |row| { Ok(Person { id: row.get(0)?, name: row.get(1)?, time_created: row.get(2)?, memo: row.get(3)?, }) })?; for person in person_iter { println!("Found person {:?}", person.unwrap()); } Ok(()) }