Info
This post is auto-generated from RSS feed The Rust Programming Language Forum - Latest topics. Source: Secure crud gtk gui mariadb with rust
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
🏷️ Rust_feed