rust sqlxで実行に影響ないエラーのハンドリング
環境
問題
rustでsqlx::query!
を用いてSQL操作を行った際に,データベースからのエラーを返されることがある.
デフォルトではpanicで動作終了するが,
プログラム実行自体に影響ないエラーはスルーして続行させたいことがある.
その解決策のメモ
- RowNotFound : (sqlx::query!は何かしら結果が返ってくることを期待するが,SQL文で
CREATE
などを使用した場合はなにも返ってこないのでエラーを吐く) - MySqlDatabaseError (同じデータを登録しようとしたら起こるエラー.これを無視するかは要注意)
解決策
match
で取り扱う
#[tokio::main] fn main(){ //~~~~ let pool = MySqlPoolOptions::new().max_connections(5).connect("DATABASE_URL").await.unwrap(); let f = sqlx::query!("SQL文").fetch_one(&pool).await; //ここからが本題 let _f = match f { Ok(_) => (), Err(error) => match error { sqlx::Error::RowNotFound => (), sqlx::Error::Database(_) => (), other_error => println!("{}", other_error),//想定外のエラーは何かしらの処理を書く(ここではエラー表示して続行) }, }; }