Secure crud gtk gui mariadb with rust

⚓ Rust    📅 2025-09-02    👤 surdeus    👁️ 3      

surdeus

type or paste code here

 :
```toml
[dependencies]
gtk = "0.9"
mysql = "20.0"
rpassword = "5.0"

use mysql::;
use mysql::prelude::
;

fn establish_connection() -> PooledConn {
let url = "mysql://username:password@localhost:3306/database_name";
let pool = Pool::new(url).expect("Failed to create a database pool");
pool.get_conn().expect("Failed to get a connection")
}


### 

fn create_record(conn: &mut PooledConn, name: &str, age: i32) {
    conn.exec_drop(
        "INSERT INTO users (name, age) VALUES (:name, :age)",
        params! {
            "name" => name,
            "age" => age,
        },
    ).expect("Failed to insert record");
}

fn read_records(conn: &mut PooledConn) -> Vec<(u32, String, i32)> {
    conn.query_map(
        "SELECT id, name, age FROM users",
        |(id, name, age)| (id, name, age),
    ).expect("Failed to read records")
}

fn update_record(conn: &mut PooledConn, id: u32, name: &str, age: i32) {
    conn.exec_drop(
        "UPDATE users SET name=:name, age=:age WHERE id=:id",
        params! {
            "id" => id,
            "name" => name,
            "age" => age,
        },
    ).expect("Failed to update record");
}

fn delete_record(conn: &mut PooledConn, id: u32) {
    conn.exec_drop(
        "DELETE FROM users WHERE id=:id",
        params! {
            "id" => id,
        },
    ).expect("Failed to delete record");
}

use rpassword::read_password;

fn get_secure_input(prompt: &str) -> String {
println!("{}", prompt);
read_password().expect("Failed to read password")
}


###


extern crate gtk;
use gtk::prelude::*;
use gtk::{Button, Entry, Label};

fn main() {
    gtk::init().expect("Failed to initialize GTK.");

    let window = gtk::Window::new(gtk::WindowType::Toplevel);
    window.set_title("CRUD App");
    window.set_default_size(300, 200);

    let entry_name = Entry::new();
    let entry_age = Entry::new();
    let button = Button::new_with_label("Add Record");
    let label = Label::new(None);

    button.connect_clicked(move |_| {
        let name = entry_name.get_text().unwrap();
        let age: i32 = entry_age.get_text().unwrap().parse().unwrap();
        // Assume conn is an established connection
        create_record(&mut establish_connection(), &name, age);
        label.set_text("Record added successfully!");
    });

    let vbox = gtk::Box::new(gtk::Orientation::Vertical, 5);
    vbox.pack_start(&entry_name, true, true, 0);
    vbox.pack_start(&entry_age, true, true, 0);
    vbox.pack_start(&button, true, true, 0);
    vbox.pack_start(&label, true, true, 0);

    window.add(&vbox);
    window.show_all();

    window.connect_delete_event(|_, _| {
        gtk::main_quit();
        Inhibit(false)
    });

    gtk::main();
}

1 post - 1 participant

Read full topic

🏷️ Rust_feed